Javascript按值从数组中删除数组元素
Javascript delete array element from array by value
我有一个javascript数组,我想根据数组的值删除一个元素,这是我的数组,我尝试过但没有成功。
array = []
array.push (["Mozilla","Firefox",1.10])
index = array.indexOf(["Mozilla","Firefox",1.10])
array.splice(index, 1)
但它不起作用,知道吗?
您正在尝试比较数组,这些数组是具有唯一地址的对象。您的index
变量是-1
。
在控制台中尝试['Mozilla','Firefox',1.10] === ['Mozilla','Firefox',1.10]
,您会发现,仅仅因为两个数组具有相同的值,并不意味着它们是同一个数组。
你需要的是一种深度相等的比较风格,它检查数组中的每个值,看看两个数组是否相似。
看看lodash的isEqual
函数就知道了。
这里有一个简单的循环函数:
function deepIndex(array, comparison) {
var i, j;
main:
for (i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
for (j = 0; j < array[i].length; j++) {
if (array[i][j] !== comparison[j]) {
continue main;
}
}
return i;
}
}
}
var arr = [];
arr.push('string', ['Mozilla','Firefox',1.10], 'thing');
var index = deepIndex(arr, ['Mozilla','Firefox',1.10])
console.log(index, arr);
arr.splice(index, 1);
console.log(arr);
看看这个:
// Array Remove - By John Resig (MIT Licensed)
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
这是JQUery的创造者创造的功能。基本上你采取一件事的索引,然后它被删除
Array.prototype.remove = function(from, to) {
var rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest);
};
//Equals Function taken from:
//http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript
Array.prototype.equals = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;
// compare lengths - can save a lot of time
if (this.length != array.length)
return false;
for (var i = 0, l=this.length; i < l; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].equals(array[i]))
return false;
}
else if (this[i] != array[i]) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
array = [];
array.push (["Mozilla","Firefox",1.10]);
array.push (["Microsoft","Spartan",1.0]);
array.push (["Safari","Safari",1.4]);
index = indexOfArr(array,["Mozilla","Firefox",1.10]);
array.remove(index, index);
document.getElementById("length").innerHTML = array.length;
for(var i = 0; i < array.length; i++){
document.getElementById("elems").innerHTML += "<br>"+array[i];
}
function indexOfArr(hay, needle){
for(var i = 0; i < hay.length; i++){
if (hay[i].equals(needle)){
return i;
}
}
return -1;
}
<span id = "length"></span><br>
<span id = "elems">Elements:</span>
您可以使用fiter
方法,而不是indexOf
。
在该方法的回调中,您可以选择不同的方法:
-
在阵列上使用
toString
并比较两个字符串 -
通过迭代包含的元素来测试长度和内容
-
。。。持续
在任何情况下,使用===
都可以解决问题,除非所包含的对象与您试图匹配的对象完全相同。同样,我的意思是一样的。我们不是在说拥有相同的内容,而是要成为相同的实例。
在数组上循环并检查等式:
array = [];
array.push(["Mozilla", "Firefox", 1.10]);
for (var i = 0; i < array.length; i++) {
if (arraysEqual(array[i], ["Mozilla", "Firefox", 1.10])) {
array.splice(i, 1);
}
}
function arraysEqual(a, b) {
if (a === b) return true;
if (a === null || b === null) return false;
if (a.length != b.length) return false;
for (var i = 0; i < a.length; ++i) {
if (a[i] !== b[i]) return false;
}
return true;
}
JSFiddle:http://jsfiddle.net/ghorg12110/r67jts35/
基于这个问题:如何用JavaScript检查两个数组是否相等?
您可以执行类似的操作
array = []
array.push (["Mozilla","Firefox",1.10])
tempArray = array[0];
index = tempArray.indexOf("Mozilla","Firefox",1.10)
array.splice(index, 1)
如果使用for
循环而不是硬编码,则可以在此基础上进行构建。
相关文章:
- Mongoose-在更新中删除数组元素
- 删除仅空格数组元素
- 如何根据数组内容添加/删除数组中的元素
- 删除数组元素并将它们添加回原来的位置
- 删除基于另一个数组的数组元素
- 如果一个键匹配,如何删除数组元素
- 无法使用拼接删除数组中的元素
- 在 jquery 中,如何通过索引[“键”] 或值删除数组元素
- 使用 Lodash 删除数组中的元素
- 按索引删除数组元素
- 删除数组元素并将它们填充在 javascript 中的另一个数组中
- 按索引删除数组元素
- 当子数组具有特定值时删除数组元素
- Redux reducer删除数组元素失败
- 使用javascript删除数组元素
- 在条件下删除数组元素
- 按值删除数组元素的最佳方法
- 删除数组元素时,边栏关闭
- Javascript按值从数组中删除数组元素
- 如何使用特定值删除数组元素