所以我在尝试思考在javascript中执行此操作的最佳方法时遇到了一些困难。我想从一个X元素的数组中删除一个未排序的索引数组。例如
var index = [ 0, 7, 10, 2, 5, 11]
array = [{field0: 0}, {field1: 1}, {field2: 2}, ... {field5: 5}, {field6: 6}...]
所以我尝试使用带拼接的嵌套for循环,但是当我拼接时,我的数组失去了索引并搞砸了。
最终结果应该是这样的
array = [{field1: 1}, {field3: 3}, {field4: 4}, .... {field6: 6} ...]
非常感谢任何帮助。
答案 0 :(得分:2)
你的问题的解决方案实际上是一个单一的方法:
array = [00,11,22,33,44,55,66,77];
indexes = [1,7,5,3];
array = array.filter(function(_,i) { return indexes.indexOf(i) < 0 });
document.write('<pre>'+JSON.stringify(array,0,3));
答案 1 :(得分:1)
如果要排除要删除的元素数组不是问题,您可以执行以下操作:
var array = [{field0: 0}, {field1: 1}, {field2: 2}, {field3: 3}, {field4: 4}, {field5: 5}, {field6: 6}, {field7: 7}, {field8: 8}, {field9: 9}];
var indices = [0, 7, 2, 5];
indices.sort(function(a, b) {
if ( a > b ) {
return 1;
} else if ( b > a ) {
return -1;
} else {
return 0;
}
});
for (var i = 0, offset = 0; i < indices.length; i++, offset++) {
array.splice(indices[i] - offset, 1);
}
console.log(array);
如果由于某种原因您无法对要删除的索引数组进行排序,您可以使用以下内容跟踪偏移量:
var array = [{field0: 0}, {field1: 1}, {field2: 2}, {field3: 3}, {field4: 4}, {field5: 5}, {field6: 6}, {field7: 7}, {field8: 8}, {field9: 9}];
var indices = [0, 7, 2, 5];
var removedIndices = [];
function calcOffset(val) {
var numRemoved = 0;
for (var j = 0; j < removedIndices.length; j++) {
if (val > removedIndices[j]) {
numRemoved++;
}
}
return numRemoved;
}
for (var i = 0, offset = 0; i < indices.length; i++, offset++) {
var offset = calcOffset(indices[i]);
array.splice(indices[i] - offset, 1);
removedIndices.push(indices[i]);
}
console.log(array);
答案 2 :(得分:0)
我将遍历数组(for / next循环)并在每个元素处查看索引中是否存在数字(index.indexOf(n))。如果是,请将元素推送到新的临时数组。
完成后,将临时数组复制回数组OR array.length = 0并将临时数组中的元素推回原始数组。
类似的东西:
var index = [ 0, 7, 10, 2, 5, 11]
var array = [{field0: 0}, {field1: 1}, {field2: 2},{field3: 3}, {field4: 4}];
var tempArray = [];
for(var arrayIndex = 0;arrayIndex < array.length;arrayIndex++){
if(index.indexOf(arrayIndex) === -1)
{
tempArray.push(array[arrayIndex]);
}
}
array = tempArray;
答案 3 :(得分:0)
只要未定义不是问题,您可以尝试通过循环删除删除数组[index [count]] 。
或者,您可以设置循环遍历数组中的所有元素,并将索引不存在的任何元素设置为false。然后,再次循环遍历它们,只将非假的那些复制到新数组。
newArray = new Array();
for (var i = 0; i < array.length; i++) {
for(var j=0; j<index.length; j++) {
if (index[j] == i) {
array[i] = false;
}
}
};
for (var i = 0; i < array.length; i++) {
if (array[i] != false) {
newArray[i] = array[i];
}
}