如何根据对象中另一个值的存在来推送对象值

时间:2016-02-09 06:00:55

标签: javascript arrays object for-loop foreach

我试图根据同一对象中另一个键的值将特定键的值压入数组。这可能吗?

例如:

var goodFruit = [];

var obj = [{ status: 'good', value: 'apple' },{ status: 'bad', value: 'orange' },{ status: 'good', value: 'grape' },{ status: 'bad', value: 'lemon' }];

我想将 value的{​​{1}}推入goodFruit数组,结果如下:

status:good

4 个答案:

答案 0 :(得分:1)

使用filtermap

  

filter()方法创建一个包含所有传递元素的新数组   由提供的函数实现的测试。

     

map()方法创建一个新数组,其中包含调用a的结果   为此数组中的每个元素提供了函数。



var obj = [{ status: 'good', value: 'apple' },{ status:'bad', value: 'orange' },{ status: 'good', value: 'grape' },{ status: 'bad', value: 'lemon' }];

var goodFruits=obj.filter(function(a){
  return a.status=='good';
}).map(function(b){
  return b.value;
});

console.log(goodFruits)




或者根据Ted Hopp的建议,您可以使用reduce,只需一次传递即可提高效率

  

reduce()方法对累加器和每个累加器应用一个函数   数组的值(从左到右)将其减少为单个   值。

答案 1 :(得分:1)

obj.forEach(function(o){
if(o.status==='good'){
   goodFruit.push(o.value)
 }
})

答案 2 :(得分:0)

for(var i =0;i<obj.length;i++){
 if(obj[i].status==='good'){
   goodFruit.push(obj[i].value)
 }
}
console.log(goodFruit);

答案 3 :(得分:0)

您可以使用reduce()

var obj = [
  { status: 'good', value: 'apple' },
  { status: 'bad', value: 'orange' },
  { status: 'good', value: 'grape' },
  { status: 'bad', value: 'lemon' }
];

var goodFruit = obj.reduce(
  function(result, item) {
    if (item.status === 'good') {
      result.push(item.value);
    }
    return result;
  }, []
);
alert(goodFruit);