在javascript中我有两个数组,他们在聊天室中有在线用户列表。必须使用新值更新具有旧值的第一个数组。
var array1 = array(1,5,50,4,12,3,60);
var array2 = array(12,1,5,4,3,60);
array1在用户界面上,所以我不想用array2替换它。首先,我想从array1中删除不在array2中的值,然后在array1的开头从array2添加新值。
我还应该提到,那种数组2很重要,数组的数量也可能不同。数组的数量可以是100,它可以每5-10秒更新一次!
例如,您可以在Stackoverflow聊天服务http://chat.stackoverflow.com/rooms/17/javascript
上查看在线用户列表这是我开发它的第一种方式,我能做得更好吗?
删除旧值
for(i=0;i<array1.length;i++)
if(array2.indexOf(array1[i])==-1)
removeValue(array1[i]);
用于添加新值
for(i=0;i<array2.length;i++)
if(array1.indexOf(array2[i])==-1)
addValue(array2[i]);
您对更新第一个数组有什么想法吗?
答案 0 :(得分:0)
您的两个功能都存在语法错误。而不是array2.indexOf(array1[i]==-1)
它应该是array2.indexOf(array1[i])==-1
。
要更新阵列,可以使用阵列的unshift
(前置)和splice
方法。但是,当您从数组中删除项目时,其长度会发生变化,这会影响您的循环条件 - 更好地向后迭代。
答案 1 :(得分:0)
不确定我是否理解正确但这是你需要的吗?你想通过保持旧元素位置尽可能固定,并在左边插入新元素来更新和数组吗?
在此尝试:http://jsfiddle.net/Rt5Mx/
...
如果您需要在右侧添加新元素,只需更改为
return array3.concat(array2);
并且如果需要反向排序可以使用array2.reverse()(但是你可以更好地考虑在生成array2时/更改其方向)。
<强>更新强>
保持旧array2完整的版本:左右合并:
var array1 = [1,5,50,4,12,3,60];
var array2 = [12,1,5,4,43,3,60];
alert(mySpecialMergeLeft(array1,array2));
// 43,1,5,4,12,3,60
// same as old array1 with added 43 at left and removed 50
alert(mySpecialMergeRight(array1,array2));
// 1,5,4,12,3,60,43
// same as old array1 with added 43 at right and removed 50
function mySpecialMergeLeft(array1,array2) {
var pos;
var array3=[];
var array4=array2.slice();
for(var i=0;i<array1.length;i++) {
pos=array4.indexOf(array1[i]);
if(pos!=-1) {
array3.push(array1[i]);
array4.splice(pos,1);
}
}
return array4.concat(array3);
}
function mySpecialMergeRight(array1,array2) {
var pos;
var array3=[];
var array4=array2.slice();
for(var i=0;i<array1.length;i++) {
pos=array4.indexOf(array1[i]);
if(pos!=-1) {
array3.push(array1[i]);
array4.splice(pos,1);
}
}
return array3.concat(array4);
}
答案 2 :(得分:0)
这是我的解决方法。
首先,我一直使用lodash
的{{3}} API来节省时间。
例如: 我有一个包含值1、2、3的旧数组,以及一个包含2、4的新数组。 因此,我需要删除 1、3和添加 4到旧数组中。
const _ = require('lodash');
const oldArr = [1, 2, 3];
const newArr = [2, 4];
const willRemove = _.difference(oldArr, newArr);
const willAdd = _.difference(newArr, oldArr);
console.log('Remove', willRemove); // [1, 3]
console.log('Add', willAdd); // [4]
下一步就是你了。