我可以根據值過濾或提取對象的值嗎?基於值獲取/過濾對象
例如[10,19]會返回Bill和Sam。
[ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
]
感謝/
我可以根據值過濾或提取對象的值嗎?基於值獲取/過濾對象
例如[10,19]會返回Bill和Sam。
[ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
]
感謝/
可以使用Array.prototype.filter()功能:
const data = [ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
]
const result = data.filter(o => ~[10, 19].indexOf(o.id))
// ~[10, 19].indexOf(o.id) is equivalent to [10, 19].indexOf(o.id) > -1
你可以連續過濾,然後地圖功能:
const mySearch = [10, 19]
const result = myArray.filter(elem => mySearch.indexOf(elem.id) > -1) // filter by id
.map(elem => elem.nice_name) // return the nice_name only for each entry
// result is now ['Bill', 'Sam']
僅使用JavaScript你可以做這樣的事情。
var size = a.length; //a -> your array
var inputSize = input.length; // -> the search array
var thePeople = []; //where you will store the names that match
for(var i = 0; i < size; i++) { //cycle your array
for(var j = 0; j < inputSize; j++) { //cycle the search array
if(a[i].id === input[j]) { //check if there is a match on id
thePeople.push(a[i].nice_name); //save the name into a new array
}
}
}
這裏是一個小提琴https://jsfiddle.net/xo5vxwo0/
的indexOf找到數組中的元素。
arr=[ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
]
var fill=[10,19];
var ans=[];
arr.map(function(a){
if(fill.indexOf(a["id"])>-1)
ans.push(a["nice_name"]);
})
console.log(ans);
*{
background-color:pink;
}
var data = [ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
]
var idWant = [10,19];
var content = '';
for(var keysWant in idWant){
var number = idWant[keysWant];
for(var keysData in data){
if(number == data[keysData]['id']){
content += data[keysData]['nice_name'] + ' ';
}
}
}
console.log(content);
有人可能會使用一個單一的減少,而不是filter.map鏈。
var arr = [ { "id": 10, "nice_name": "Bill" },
{ "id": 12, "nice_name": "Dan"},
{ "id": 18, "nice_name": "Tony" },
{ "id": 19, "nice_name": "Sam" },
],
src = [10,19],
result = arr.reduce((r,o) => src.includes(o.id) ? r.concat(o.nice_name) : r,[]);
console.log(result);
只有代碼的答案是罰款,但更好,如果記錄。 – Marcs