我试图根据同一对象中另一个键的值将特定键的值压入数组。这可能吗?
例如:
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
答案 0 :(得分:1)
使用filter
和map
:
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);