删除元素后重新排序数组

时间:2016-06-23 12:18:26

标签: javascript jquery angularjs

在我的应用程序中,我有一个项目列表,在检查时将被推入数组,并在取消选中时将从数组中删除。 这是代码

          if (data.selectedInsertion === true) {
                order.push(data);
            }
            else if (data.selectedInsertion === false) {
                angular.forEach(order, function (value,key) {
                    if (value == data) {
                        delete order[key];
                    }
                })
            }

问题是当数组中的第5个元素被删除时,数组将永远缺少该键,因此当我使用angularjs在模板中显示它时,它将在该位置显示空白行或缺少第5个元素。如何在删除元素后重新排列数组。

3 个答案:

答案 0 :(得分:0)

if (data.selectedInsertion === true) {
    order.push(data);
}
else if (data.selectedInsertion === false) {
    order.splice(order.index(data),1);
}

答案 1 :(得分:0)

假设数组中的所有值都是唯一的,您可以这样做:

if(data.selectedInsertion) {
  order.push(data);
} else {
  order.splice(order.indexOf(data),1)
}

Array.splice从数组中删除元素。 查看此链接以获取更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice

如果data不唯一,则只删除数组中的第一个出现。

此外,您可以省略对truefalse的显式检查,特别是因为它似乎是一个布尔值。

答案 2 :(得分:0)

请记住,永远不要使用delete来删除数组中的元素。因为它将删除元素,在它的键下留下未定义的元素。因此,您可以将其拼接或过滤掉。

将其过滤掉:

if (data.selectedInsertion === true) {
    order.push(data);
}
else if (data.selectedInsertion === false) {
    order = order.filter(function(v){
    return v !== data;
    });
}

拼接

if (data.selectedInsertion === true) {
    order.push(data);
}
else if (data.selectedInsertion === false) {
    order.splice(order.indexOf(data),1);
}
  

delete用于从对象中删除属性。