【问题标题】:Get objects having id in 1st array as same as id in objects of other array in java script获取第一个数组中具有 id 的对象与 java 脚本中其他数组的对象中的 id 相同
【发布时间】:2018-12-04 10:28:53
【问题描述】:

我有 2 个对象数组。 他们是

array1 = [{
  id:2,
  name:"person2"
},{
  id:3,
  name:"person3"
},
{
  id:4,
  name:"person4"
},
{
  id:5,
  name:"person5"
},
];
array2 = [
{
    empId:2,
    isdeleted:false
},
{
    empId:4,
    isdeleted:false
}, 
{   
    empId:3,
    isdeleted:true
}];

我需要来自 array1 的对象,其 id 与 array2 的 empId 匹配并且 isdeleted 为 false。提前致谢。

【问题讨论】:

  • 我已经尝试过了,但没有得到预期的结果。以下是我尝试过的查询。你能帮我解决这个问题吗? this.array1.filter(o => this.array2.find(o2 => o.id === o2.empId))
  • 好的,你应该在问题中包含你的努力。链接后面说的第一件事是“似乎没有尝试”。强调“出现”。如果您在问题中没有给出任何尝试的迹象,其他人只能假设您自己没有尝试过任何事情。

标签: javascript vue.js


【解决方案1】:

您可以像这样使用filtersome

let array1 = [{
    id: 2,
    name: "person2"
  }, {
    id: 3,
    name: "person3"
  },
  {
    id: 4,
    name: "person4"
  },
  {
    id: 5,
    name: "person5"
  },
];

let array2 = [{
    empId: 2,
    isdeleted: false
  },
  {
    empId: 4,
    isdeleted: false
  },
  {
    empId: 3,
    isdeleted: true
  }
];

let filteredArray = array1.filter(a => array2.some(b => b.empId === a.id && !b.isdeleted));
console.log(filteredArray);

【讨论】:

  • 还有一个问题是,如果在 array2 中我也有年龄。那么如果我想要得到的对象为 {id:some_id,name:some_name,age:some_age}。这可能吗?
  • 您还想根据年龄进行过滤吗?
  • 我已经编辑了评论。请您调查一下。
【解决方案2】:

试试

let result = [];
array1.forEach(function(element1){
    array2.forEach(function(element2){
        if (element1.id === element2.empId && !element2.isdeleted){
            result.push(element);
        }
    });
});
console.log(result);

【讨论】:

    【解决方案3】:

    您可以使用Array.filter()find()array2 中查找具有该条件的对象:

    var array1 = [{
        id: 2,
        name: "person2"
      }, {
        id: 3,
        name: "person3"
      },
      {
        id: 4,
        name: "person4"
      },
      {
        id: 5,
        name: "person5"
      },
    ];
    var array2 = [{
        empId: 2,
        isdeleted: false
      },
      {
        empId: 4,
        isdeleted: false
      },
      {
        empId: 3,
        isdeleted: true
      }
    ];
    
    var res = array1.filter((obj1)=>{
      var exist = array2.find((obj2)=> (obj1.id == obj2.empId && !obj2.isdeleted));
      return exist;
    });
    console.log(res);

    【讨论】:

      【解决方案4】:

      你可以试试这样的:

      let array1 = [
          { id:2, name:"person2"},
          { id:3, name:"person3"},
          { id:4, name:"person4"},
          { id:5, name:"person5"}
      ];
        
      let array2 = [
          { empId:2, isdeleted:false},
          { empId:4, isdeleted:false}, 
          { empId:3, isdeleted:true}
      ];
      
      let result = array1.reduce((output, item) => {
          if (array2.find((item2) => !item2.isdeleted && item.id === item2.empId)) output.push(item);
          return output;
      }, []);
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2022-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 2022-08-22
        • 1970-01-01
        相关资源
        最近更新 更多