Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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_Angularjs - Fatal编程技术网

Javascript 删除元素后对数组重新排序

Javascript 删除元素后对数组重新排序,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,在我的应用程序中,我有一个项目列表,当检查该列表时,这些项目将被推入一个数组中,当未检查该列表时,这些项目将从数组中删除。 这是密码 if (data.selectedInsertion === true) { order.push(data); } else if (data.selectedInsertion === false) { angular.forEa

在我的应用程序中,我有一个项目列表,当检查该列表时,这些项目将被推入一个数组中,当未检查该列表时,这些项目将从数组中删除。 这是密码

          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个元素。删除元素后如何重新排列数组。

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

if (data.selectedInsertion === true) {
    order.push(data);
}
else if (data.selectedInsertion === false) {
    order.splice(order.index(data),1);
}
if(data.selectedInsertion) {
  order.push(data);
} else {
  order.splice(order.indexOf(data),1)
}
Array.splice从数组中删除元素。 有关详细信息,请查看此链接:

如果
数据
不唯一,则仅删除数组中的第一个出现


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

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

if(data.selectedInsertion) {
  order.push(data);
} else {
  order.splice(order.indexOf(data),1)
}
Array.splice从数组中删除元素。 有关详细信息,请查看此链接:

如果
数据
不唯一,则仅删除数组中的第一个出现


另外,您可以省略对
true
false
的显式检查,尤其是因为它似乎是一个布尔值。

请记住,永远不要使用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从数组中删除元素。因为它将删除其键下未定义的元素。因此,您可以将其拼接或过滤掉

过滤掉它:

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);
}
删除用于从对象中删除属性


你必须把它切成薄片。您可能会混淆这里的对象和数组。如果您仍然需要键存在,则不要删除元素,而是设置一个值,如false或null,以表示“已删除”的项。您必须对其进行切片。您可能会混淆此处的对象和数组。如果仍然需要密钥,请不要删除元素,而是设置一个值,如false或null,以表示“已删除”的项。虽然此代码片段可能会解决此问题,但确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!应该是order.indexOf(data)虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!应为order.indexOf(数据)