【问题标题】:How to push object value based on the existance of another value in object如何根据对象中是否存在另一个值来推送对象值
【发布时间】:2016-02-09 06:00:54
【问题描述】:

我正在尝试根据同一对象中另一个键的值将特定键的值推送到数组中。这可能吗?

例如:

var goodFruit = [];

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

然后我想status:goodvalue 推送到goodFruit 数组中,因此结果如下所示:

var goodFruit = ['apple', 'grape'];

【问题讨论】:

  • 这些标识符不应该是字符串('good' rather than good` 等)吗?
  • 是的,这是可能的。你在哪里被困在这里?您在循环obj 数组时遇到问题吗?拥有元素后,您是否难以从元素中检索属性?您在推入数组时遇到问题吗?

标签: javascript arrays object for-loop foreach


【解决方案1】:
obj.forEach(function(o){
if(o.status==='good'){
   goodFruit.push(o.value)
 }
})

【讨论】:

  • 您将forEach 用于循环但不使用filter 进行过滤似乎有点奇怪。
【解决方案2】:

使用filtermap

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

ma​​p() 方法创建一个带有调用结果的新数组 在此数组中的每个元素上提供函数。

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() 方法对累加器应用一个函数,每个 数组的值(从左到右)将其减少为单个 价值。

【讨论】:

  • 我认为a.status && a.status=='good'可以简化为a.status == 'good'
  • 使用reduce,这可以通过数组来完成。
  • @TedHopp 这简直太棒了
【解决方案3】:
for(var i =0;i<obj.length;i++){
 if(obj[i].status==='good'){
   goodFruit.push(obj[i].value)
 }
}
console.log(goodFruit);

【讨论】:

    【解决方案4】:

    您可以为此使用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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多