Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript合并包含更新数据的数组_Javascript_Jquery_Underscore.js - Fatal编程技术网

Javascript合并包含更新数据的数组

Javascript合并包含更新数据的数组,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我有两个这样的对象数组: var myArray=[ {pk:'1',person:'person 1'}, {pk'2',person'someone'}, ]; var updatedArray=[ {pk:'2',person:'other person'} ];我认为循环更新并将其复制到当前值将是一个好方法。 如果只有一个属性需要更改,则无需对象。分配。您只需将其替换为 myArray[idx].name = uv.name var myArray=[ {pk:'1',person

我有两个这样的对象数组:

var myArray=[
{pk:'1',person:'person 1'},
{pk'2',person'someone'},
];
var updatedArray=[
{pk:'2',person:'other person'}

];我认为循环更新并将其复制到当前值将是一个好方法。 如果只有一个属性需要更改,则无需
对象。分配
。您只需将其替换为

myArray[idx].name = uv.name
var myArray=[
{pk:'1',person:'person 1'},
{pk'2',person'someone'},
];
var updatedArray=[
{pk:'2',person:'other person'}
];
updateArray.forEach(uv=>{
var idx=myArray.findIndex(v=>v.pk==uv.pk)
如果(idx!=-1)
myArray[idx]=Object.assign({},myArray[idx],uv);
else myArray.push(uv);
});

log(myArray)
我认为循环更新并将其复制到当前值将是一种好方法。 如果只有一个属性需要更改,则无需
对象。分配
。您只需将其替换为

myArray[idx].name = uv.name
var myArray=[
{pk:'1',person:'person 1'},
{pk'2',person'someone'},
];
var updatedArray=[
{pk:'2',person:'other person'}
];
updateArray.forEach(uv=>{
var idx=myArray.findIndex(v=>v.pk==uv.pk)
如果(idx!=-1)
myArray[idx]=Object.assign({},myArray[idx],uv);
else myArray.push(uv);
});

log(myArray)
最有效的方法是,首先从其中一个数组创建一个映射。 然后运行一个循环并从地图中获取项目

您只需要两个函数,
reduce
map

这种方法只需要
array1.length+array2.length
迭代,而不需要
array1.length*array2.length

// creates the map
var myMap = myArray.reduce(function(obj, item) {
  obj[item.pk] = item
}, {})

// merges updatedArray items, with the item from the map
var mergedArray = updatedArray.map(function(item) {
   return myMap[item.pk] ? Object.assign({}, myMap[item.pk], item) : item
})

最有效的方法是,首先从其中一个数组创建一个映射。 然后运行一个循环并从地图中获取项目

您只需要两个函数,
reduce
map

这种方法只需要
array1.length+array2.length
迭代,而不需要
array1.length*array2.length

// creates the map
var myMap = myArray.reduce(function(obj, item) {
  obj[item.pk] = item
}, {})

// merges updatedArray items, with the item from the map
var mergedArray = updatedArray.map(function(item) {
   return myMap[item.pk] ? Object.assign({}, myMap[item.pk], item) : item
})
你可以试试

 function mergeArr(arrOne, arrTwo, prop) {
        _.each(arrTwo, function(arrTwoobj) {
            var arrOneobj = _.find(arrOne, function(arrOneobj) {
                return arrOneobj[prop] === arrTwoobj[prop];
            });
            arrOneobj ? _.extend(arrOneobj, arrTwoobj) : arrOne.push(arrTwoobj);
        });
    }

    var myArray = [
      {pk: '1', person: 'person 1'}, 
      {pk: '2', person: 'someone'}, 
    ];

    var updatedArray = [
      {pk: '2', person: 'another person'}
    ];

    mergeArr(myArray, updatedArray, 'pk');
    console.log(myArray);
你可以试试

 function mergeArr(arrOne, arrTwo, prop) {
        _.each(arrTwo, function(arrTwoobj) {
            var arrOneobj = _.find(arrOne, function(arrOneobj) {
                return arrOneobj[prop] === arrTwoobj[prop];
            });
            arrOneobj ? _.extend(arrOneobj, arrTwoobj) : arrOne.push(arrTwoobj);
        });
    }

    var myArray = [
      {pk: '1', person: 'person 1'}, 
      {pk: '2', person: 'someone'}, 
    ];

    var updatedArray = [
      {pk: '2', person: 'another person'}
    ];

    mergeArr(myArray, updatedArray, 'pk');
    console.log(myArray);
var myArray=[
{pk:'1',person:'person 1'},
{pk'2',person'someone'},
];
var updatedArray=[
{pk:'2',person:'other person'}
];
var存在=[];
对于(更新阵列的项目){
存在[item.pk]=true;
}
用于(myArray的项){
如果(!exists.hasOwnProperty(item.pk)){
UpdateArray.push(项目);
}
}
console.log(updateArray)
var myArray=[
{pk:'1',person:'person 1'},
{pk'2',person'someone'},
];
var updatedArray=[
{pk:'2',person:'other person'}
];
var存在=[];
对于(更新阵列的项目){
存在[item.pk]=true;
}
用于(myArray的项){
如果(!exists.hasOwnProperty(item.pk)){
UpdateArray.push(项目);
}
}

console.log(updateArray)
您确定两个数组的idx相同吗???@webdeb不需要这样做,因为您可以通过其中一个数组进行循环。顺便说一句,我增强了mine以支持UpdateArray有新项目的情况。您确定两个阵列的idx相同吗???@webdeb不需要这样做,因为您可以通过其中一个阵列进行循环。顺便说一句,我增强了我的功能,以支持UpdateArray有新项目的情况。预期结果可能重复?预期结果可能重复?这个答案肯定更简单。这和mortezaT发布的答案一样快吗?我认为更快,但差别很小。这个答案肯定更简单。这和莫特扎特发布的答案一样快吗?我认为更快,但差别很小。