others - Javascript - 选择以下划线(_)开头的所有对象键

  显示原文与译文双语对照的内容

我需要在以下对象中创建一个数组的所有键(而不是值),其中键以_下划线开头。

在下面的代码Fragment中我试图让getSubscriptions()返回["_foo1","_foo2"]


let myObj = {


 foo0: 'test',


 _foo1: 'test',


 _foo2: 'test',


 foo3: 'test',


};



function getSubscriptions(obj, cb) {


 // should return ["_foo1","_foo2"]


 let ret = ["foo1","_foo2"];


 return cb(ret);


}


getSubscriptions(myObj, (ret) => {


 if (match(ret, ["_foo1","_foo2"]) ) { 


 $('.nope').hide();


 return $('.works').show(); 


 }


 $('.nope').show();


 $('.works').hide();


});



function match(arr1, arr2) {


 if(arr1.length !== arr2.length) { return false; } 


 for(var i = arr1.length; i--;) { 


 if(arr1[i] !== arr2[i]) { return false;} 


 }


 return true; 


}

body {


 background: #333;


 color: #4ac388;


 padding: 2em;


 font-family: monospace;


 font-size: 19px;


}


.nope {


 color: #ce4242;


}


.container div{


 padding: 1em;


 border: 3px dotted;


}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<div class="container">


 <div class="works">It Works!</div>


 <div class="nope">


 Doesn't Work...</div>


</div>
时间:

你可以使用Object.keysArray.filter


let myObj = {


 foo0: 'test',


 _foo1: 'test',


 _foo2: 'test',


 foo3: 'test',


};



let result = Object.keys(myObj).filter(v => v.startsWith("_"));


console.log(result);

filter中使用Object.keys,并检查第一个字符是否为下划线_


let myObj = {


 foo0: 'test',


 _foo1: 'test',


 _foo2: 'test',


 foo3: 'test',


};



const res = Object.keys(myObj).filter(([c]) => c =="_");


console.log(res);

按如下方式替换getSubscriptions()


 function getSubscriptions(obj, cb) {


 let ret = Object.keys(myObj).filter(ele => ele.startsWith('_'))


 return cb(ret)


 }



  • Object.keys(yourObject):返回yourobject的键。

  • Array.filter(function):根据数组返回过滤后的值
    真实的情况

  • String.startsWith:如果传递的字符串以('_ ')开头,则返回true或false,
...