Получить объект элемента массива из имени ключа - PullRequest
0 голосов
/ 21 февраля 2019

Я анализирую CSV-файлы в JSON с node-csvtojson, и я получил 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 голосов
/ 21 февраля 2019

Попробуйте это:

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

var res = arr.filter(obj => obj.a === 1);

console.log(res);
0 голосов
/ 21 февраля 2019

Простое использование 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);
0 голосов
/ 21 февраля 2019

Использовать 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
}));
0 голосов
/ 21 февраля 2019

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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...