【问题标题】:Filter array of objects by property按属性过滤对象数组
【发布时间】:2021-03-04 17:17:08
【问题描述】:

我有一个对象数组:

const obj = [
        { name: 'Test', age: 25 },
        { name: 'App', age: 27 },
        { name: 'Const', age: 28 },
];

我还有另一个:

const value = [
        { surname: 'Test', age: 54 },
        { surname: 'Back', age: 54 },
        { surname: 'Front', age: 54 },
        { surname: 'Const', age: 54 },
        { surname: 'App', age: 54 },
];

现在,我想在第二个数组中只保留对象, 其中有 name === surname 和其他的删除。 键必须不同,但它们中的值必须相同。 例如:{name: "Test", age: 25} === {surname: "Test", age: 54}(只是一个例子) 如何制作?

【问题讨论】:

    标签: javascript arrays object filter


    【解决方案1】:

    试试这个

    const obj = [
      { name: 'Test', age: 25 },
      { name: 'App', age: 27 },
      { name: 'Const', age: 28 },
    ];
    
    let value = [
      { surname: 'Test', age: 54 },
      { surname: 'Back', age: 54 },
      { surname: 'Front', age: 54 },
      { surname: 'Const', age: 54 },
      { surname: 'App', age: 54 },
    ];
    
    const names = obj.map(el => el.name);
    
    value = value.filter(el => names.includes(el.surname));
    

    或者像这样:

    const obj = [
      { name: 'Test', age: 25 },
      { name: 'App', age: 27 },
      { name: 'Const', age: 28 },
    ];
    
    const names = obj.map(el => el.name);
    
    const value = [
      { surname: 'Test', age: 54 },
      { surname: 'Back', age: 54 },
      { surname: 'Front', age: 54 },
      { surname: 'Const', age: 54 },
      { surname: 'App', age: 54 },
    ].filter(el => names.includes(el.surname));
    

    【讨论】:

      【解决方案2】:

      使用过滤器和一些:

      const myArrayFiltered = obj.filter( el => {
        return value.some( f => {
          return f.surname === el.name;
        });
      });
      

      【讨论】:

        【解决方案3】:

        您必须使用filter 并查看第二个列表中是否有键。
        并且不要忘记将 filter() 的结果重新分配给 value 列表,因为过滤器不会更改原始列表,而是返回一个新的过滤后的列表。

        value = value.filter(oneVal => obj.find(o => o.name === oneVal.surname))
        

        更多关于filter() here

        【讨论】:

          【解决方案4】:

          使用嵌入式 Javascript 的 findfilter 方法:

          value.filter(k => 
             obj.find(v => v.name === k.surname)
          )
          

          这基本上是说“从value 数组中过滤所有符合此条件的值”。标准是“在obj 中查找名称等于姓氏的值”。

          【讨论】:

            猜你喜欢
            • 2019-05-04
            • 2020-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-08-18
            • 1970-01-01
            • 2015-06-21
            相关资源
            最近更新 更多