多个数组对象操作

multiple arrays object manipulation

本文关键字:操作 对象 数组      更新时间:2023-09-26
array1 = [{"name":"John"},{"name":"James"}];
array2 = [{"gred_id":1,"name":"John","gred":"A"},{"gred_id":2,"name":"James","gred":"B"}];

我有 2 个像上面一样的数组。通过比较候选人的名字,我想把gred_id放到 array1 中。我卡在这里

$.each(array1,function(){
    var name= this["name"];
    $.each(array2, function(){
        if(name == this.name){
            this["grey_id"] = {"grey_id":this.id}; // not sure this is correct or wrong
        }
    });
});

这就是我最终想要的:

array1 = [{"name":"John","gred_id":1},{"name":"James","gred_id":2}];

根据jQuery的.each()文档,你不需要将项目存储在变量中。您可以使用.each()函数参数。第一个参数返回索引,第二个参数返回项目。

因此,您可以像这样优化代码。

小提琴

var array1 = [{"name":"John"},{"name":"James"}];
var array2 = [{"gred_id":1,"name":"John","gred":"A"},{"gred_id":2,"name":"James","gred":"B"}];
$.each(array1, function (i, item) {
    $.each(array2, function (j, val) {
        if (item.name === val.name) {
            item.grey_id = val.gred_id;     
        }
    });
});

输出

array1 = [{"name":"John","gred_id":1},{"name":"James","gred_id":2}];

您可以将 object1 迭代存储为子对象,因为当存在不同的范围时,它会被修改。 itm1=this,因此 array1 对象将存储在作用域 array1 迭代和 array2 迭代中的每个迭代中

var array1 = [{"name":"John"},{"name":"James"}];
var array2 = [{"gred_id":1,"name":"John","gred":"A"},{"gred_id":2,"name":"James","gred":"B"}];
var itm1;
$.each(array1,function(){
    itm1= this;
    $.each(array2, function(){
        if(itm1.name == this.name){
            itm1.grey_id = this.gred_id; // here this refers to array2 iteration
        }
    });
});
console.log(array1);

尝试使用$.map()

var array1 = [{
  "name": "John"
}, {
  "name": "James"
}];
var array2 = [{
  "gred_id": 1,
  "name": "John",
  "gred": "A"
}, {
  "gred_id": 2,
  "name": "James",
  "gred": "B"
}];
array1 = $.map(array1, function(val, key) {
  return val.name === array2[key].name 
         ? $.extend({}, val, {"gred_id": array2[key].gred_id}) 
         : val
});
$("pre").text(JSON.stringify(array1, null, 2));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<pre></pre>

使用,$.grep with $.each

$.each(array1, function(key, val){
    match = $.grep(array2, function(obj){   // search for match
        return obj.name == val.name;
    });
    array1[key].gred_id = match[0].gred_id; // assign the match
});