【问题标题】:Get an element object of an array from a key name从键名中获取数组的元素对象
【发布时间】:2019-07-14 23:54:38
【问题描述】:

我正在使用 node-csvtojson 将 csv 文件解析为 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 做到这一点,但我迷失了如何去做。

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

比你

【问题讨论】:

    标签: javascript arrays json object ecmascript-6


    【解决方案1】:

    像这样使用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
    }));

    【讨论】:

      【解决方案2】:

      简单使用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);

      【讨论】:

        【解决方案3】:

        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))

        【讨论】:

          【解决方案4】:

          试试这个:

          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);

          【讨论】:

            猜你喜欢
            • 2021-12-16
            • 2021-03-13
            • 1970-01-01
            • 2021-06-30
            • 2017-10-28
            • 2017-04-18
            • 2018-11-23
            • 1970-01-01
            • 2016-04-01
            相关资源
            最近更新 更多