2016-11-25 104 views
0

我可以根據值過濾或提取對象的值嗎?基於值獲取/過濾對象

例如[10,19]會返回Bill和Sam。

[ { "id": 10, "nice_name": "Bill" }, 
    { "id": 12, "nice_name": "Dan"}, 
    { "id": 18, "nice_name": "Tony" }, 
    { "id": 19, "nice_name": "Sam" }, 
] 

感謝/

回答

1

可以使用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 
3

你可以連續過濾,然後地圖功能:

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'] 
0

僅使用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/

0

的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; 
 
}

0
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); 
+0

只有代碼的答案是罰款,但更好,如果記錄。 – Marcs

0

有人可能會使用一個單一的減少,而不是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);