从键名获取数组的元素对象

时间:2019-02-21 06:44:09

标签: javascript arrays json object ecmascript-6

我正在使用node-csvtojson将csv fils解析为json,并且得到了带有以下代码的JSONarray

csv({delimiter: ';'}).fromFile(path).then((jsonObj)=>{
    data = jsonObj;
    console.log(jsonObj);
})

带有

之类的csv
a,b,c
A,B,C
1,2,3
1,B,C

我有

[
{
 a: A,
 b: B,
 c: C,
},
{
 a: 1,
 b: 2,
 c: 3,
},
{
 a: 1,
 b: B,
 c: C
}
]

但是我想找到每个具有元素a === 1的对象,并且想要拥有该对象的所有内容,

像这样:

{
 a: 1,
 b: 2,
 c: 3,
},
{
 a: 1,
 b: B,
 c: C,
}

但是我很难做到这一点,我尝试使用array.filter,但没有成功,然后尝试尝试使用array.map,但是我迷失了如何做。

您有什么想法吗,或者我可以做到吗?

谢谢

4 个答案:

答案 0 :(得分:4)

像这样使用Array.filter

const data = [{
    a: 'A',
    b: 'B',
    c: 'C',
  },
  {
    a: 1,
    b: 2,
    c: 3,
  },
  {
    a: 1,
    b: 'B',
    c: 'C'
  }
];

console.log(data.filter(({ a }) => a == 1));

如果您希望它与旧的浏览器一起使用,请使用ES5兼容版本:

var data = [{
    a: 'A',
    b: 'B',
    c: 'C',
  },
  {
    a: 1,
    b: 2,
    c: 3,
  },
  {
    a: 1,
    b: 'B',
    c: 'C'
  }
];

console.log(data.filter(function(obj) {
  return obj.a == 1
}));

答案 1 :(得分:3)

只需使用 Array.filter 即可过滤对象数组并选择一个具有属性a === 1

的对象。

var arr = [{"a":"A","b":"B","c":"C"},{"a":1,"b":2,"c":3},{"a":1,"b":"B","c":"C"}];
const filteredArr = arr.filter(obj => obj.a === 1);
console.log(filteredArr);

使用 Array.reduce ,您可以执行相同的操作:

var arr = [{"a":"A","b":"B","c":"C"},{"a":1,"b":2,"c":3},{"a":1,"b":"B","c":"C"}];
const redArr = arr.reduce((acc, obj) => {
   return acc = obj.a === 1 ? acc.concat(obj) : acc;
}, []);
console.log(redArr);

使用 Array.map 来解决此问题不是正确的方法,尽管可能的是:

var arr = [{"a":"A","b":"B","c":"C"},{"a":1,"b":2,"c":3},{"a":1,"b":"B","c":"C"}];
const mapArr = arr.map(obj => obj.a === 1 ? obj : undefined).filter(obj => obj); //hack to remove undefined elements
console.log(mapArr);

答案 2 :(得分:1)

console.log([{
    a: 'A',
    b: 'B',
    c: 'C',
  },
  {
    a: 1,
    b: 2,
    c: 3,
  },
  {
    a: 1,
    b: 'B',
    c: 'C'
  }
].filter(o => o.a === 1))

答案 3 :(得分:1)

尝试一下:

implementation 'com.google.android.material:material:1.0.0'