慕勒3428872
2019-04-18 18:15:38
我需要在下面的對象中創建一個包含所有鍵(而不是值)的數組,其中鍵以_下劃線開頭...在下面的代碼片段中,我試圖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>
4 回答

慕森王
TA貢獻1777條經驗 獲得超3個贊
您可以使用Object.keys和Array.filter
let myObj = {
foo0: 'test',
_foo1: 'test',
_foo2: 'test',
foo3: 'test',
};
let result = Object.keys(myObj).filter(v => v.startsWith("_"));
console.log(result);

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
使用Object.keys帶filter,并檢查第一個字符是一個下劃線_:
let myObj = {
foo0: 'test',
_foo1: 'test',
_foo2: 'test',
foo3: 'test',
};
const res = Object.keys(myObj).filter(([c]) => c == "_");
console.log(res);

莫回無
TA貢獻1865條經驗 獲得超7個贊
替換您getSubscriptions()
的如下
function getSubscriptions(obj, cb) { let ret = Object.keys(myObj).filter(ele => ele.startsWith('_')) return cb(ret) }
Object.keys(yourObject):返回yourobject的鍵。
Array.filter(function):根據
truthy條件從數組返回過濾值String.startsWith:如果傳遞的字符串以('_')開頭,則返回true或false
添加回答
舉報
0/150
提交
取消