如何在Javascript中比较数组和对象?

时间:2018-10-02 14:46:25

标签: javascript arrays object compare

我有两个json数组和对象 我想比较两个json并推送另一个对象

obj1 = ["user1", "user2"]
obj2 = [
  {
    "userName": "user1", 
    "id": "14" 
  },
  {
    "userName": "user2",
    "id": "9",
  },
  {
    "userName": "user3",
    "id": "3",
  },
  {
    "userName": "user4",
    "id": "1",
  }
]

我想得到如下结果

[
  {
    "userName": "user1",
    "id": "14"
  },
  {
    "userName": "user2",
    "id": "9",
  }
]

之后,我尝试比较两个数组并得到所需的结果。

var obj1 = ["user1","user2"]
var obj2 = [
  {
    "userName": "user1",
    "id": "14"
  },
  {
    "userName": "user2",
    "id": "9",
  },
  {
    "userName": "user3",
    "id": "3",
  },
  {
    "userName": "user4",
    "id": "1",
  }
]

var objArray = [];
for (var i = 0; i < obj.length; i++) {
if (obj1[i] === obj2.userName) {
  objArray.push(obj2[i]);
}
return objArray;

请帮助我解决问题。 预先感谢

2 个答案:

答案 0 :(得分:5)

您可以通过使用Array#includes检查名称来进行过滤。

var array1 = ["user1", "user2"],
    array2 = [{ userName: "user1", id: "14" }, { userName: "user2", id: "9", }, { userName: "user3", id: "3", }, { userName: "user4", id: "1", }],
    result = array2.filter(({ userName }) => array1.includes(userName));
  
console.log(result);

答案 1 :(得分:0)

您需要两个循环:

  • 通过obj1[i]进行迭代,并为obj1的每个索引...
    • 遍历obj2[]并测试每个对象,以查看username属性的值是否等于obj[i]的值。

 var obj1 =  ["user1","user2"]
 var obj2 = [
  {  
    "userName": "user1", 
   "id": "14" 
  },
 {

   "userName": "user2",  
    "id": "9",    
 },
 {

    "userName": "user3",    
    "id": "3",
  },
{

    "userName": "user4",    
   "id": "1",
 }] 

function myFunction(){
  var objArray = [];
  for (var i=0; i < obj1.length; i++) {
    for (var userIndex=0; userIndex < obj2.length; userIndex++){
      if (obj1[i] === obj2[userIndex].userName){
       objArray.push( obj2[userIndex] );
      }
    }
  }
  return objArray;
};

console.log(myFunction());