遍历对象数组并创建一个真值数组

时间:2019-01-25 17:00:11

标签: javascript reactjs

最近几天,我一直在努力获得通行证。但是不知道如何解决这个问题。我正在做一个React项目。以下是我的问题

var array = [
    {name: 'a', value: false}, 
    {name: 'b', value: false}, 
    {name: 'c', value: false}, 
    {name: 'd', value: true}, 
    {name: 'e', value: false}
]

我尝试使用Javascript filterforEach方法,但无法找出完美的解决方案来获得names为{{ 1}}。先前数据样本的预期输出应为:

value

5 个答案:

答案 0 :(得分:2)

您可以使用Array.filter,然后使用Array.map

filter检查value === true,它们map将返回所需的字段。

var array = [{name: 'a', value: false}, {name: 'b', value: false}, {name: 'c', value: false}, {name: 'd', value: true}, {name: 'e', value: false}]

var ans = array.filter(function(o){
  return o.value
}).map(function(o){
  return o.name;
});

console.log(ans);

答案 1 :(得分:2)

您可以使用reduce()在数组上仅迭代一次来做到这一点:

var array = [
    {name: 'a', value: false},
    {name: 'b', value: false},
    {name: 'c', value: false},
    {name: 'd', value: true},
    {name: 'e', value: false}
]

let res = array.reduce((acc, curr) =>
{
    curr.value && acc.push(curr.name);
    return acc;
}, []);

console.log(res);

或使用spread syntaxdestructuring

var array = [
    {name: 'a', value: false},
    {name: 'b', value: false},
    {name: 'c', value: false},
    {name: 'd', value: true},
    {name: 'e', value: false}
]

let res = array.reduce((acc, {name, value}) => value ? [...acc, name] : acc, []);

console.log(res);

答案 2 :(得分:1)

您只能使用reduce来实现此目的。仅当值为true时,才添加到acc数组。

const  array = [{name: 'a', value: false}, {name: 'b', value: false}, {name: 'c', value: false}, {name: 'd', value: true}, {name: 'e', value: false}];

const res = array.reduce((acc, { name, value }) => value ? acc.concat(name) : acc, []);

console.log(res);

答案 3 :(得分:0)

使用简单的for循环

var array = [{name: 'a', value: false}, {name: 'b', value: false}, {name: 'c', value: false}, {name: 'd', value: true}, {name: 'e', value: false}]

let op = []

for(let i=0; i<array.length; i++) {
  if(array[i].value){
    op.push(array[i].name)
  }
}

console.log(op)

答案 4 :(得分:0)

使用 Object.values() find()我们可以遍历值并在数组中返回名称

var array = [
    {name: 'a', value: false},
    {name: 'b', value: false},
    {name: 'c', value: false},
    {name: 'd', value: true},
    {name: 'e', value: false}
]

const result = arr => [Object.values(arr).find(val => val.value).name];

console.log(result(array)); // [ 'd' ]