我有一个像这样的数组
arr = ["orange","red","black","white"]
我想增强数组对象,定义一个名为deleteElem()
的方法,其作用如下:
arr2 = arr.deleteElem("red"); // ["orange","black","white"] (with no hole)
如何仅使用value参数(不使用索引)来完成此任务?
我有一个像这样的数组
arr = ["orange","red","black","white"]
我想增强数组对象,定义一个名为deleteElem()
的方法,其作用如下:
arr2 = arr.deleteElem("red"); // ["orange","black","white"] (with no hole)
如何仅使用value参数(不使用索引)来完成此任务?
下面是实现方法:
var arr = ["orange","red","black","white"];
var index = arr.indexOf("red");
if (index >= 0) {
arr.splice( index, 1 );
}
这段代码将从你的数组中删除一个"red"的出现。
.indexOf()
,但在一些旧版本的IE中不被支持。 - jfriend00> [1].indexOf(1);
0
> [1].splice(0, 1);
[ 1 ]
- achalk当我刚开始学习编码时,我几乎无法理解splice
在做什么,即使今天它看起来也不太易读。
但可读性很重要。
我宁愿使用过滤方法,就像这样:
arr = ["orange","red","black","white","red"]
arr = arr.filter(val => val !== "red");
console.log(arr) // ["orange","black","white"]
注意所有包含“red”的元素都已从数组中删除。
从那里开始,您可以轻松处理更复杂的数据,例如对象数组。
arr = arr.filter(obj => obj.prop !== "red");
有一个相关的underscore方法,http://underscorejs.org/#without
。arr = ["orange","red","black","white"];
arr = _.without(arr, "red");
var deleteMe = function( arr, me ){
var i = arr.length;
while( i-- ) if(arr[i] === me ) arr.splice(i,1);
}
var arr = ["orange","red","black", "orange", "white" , "orange" ];
deleteMe( arr , "orange");
现在 arr 的值是 ["red", "black", "white"]。
我的方法是,让我们看看别人怎么说。它还支持一个“equals”方法。
// Remove array value
// @param {Object} val
Array.prototype.removeByValue = function (val) {
for (var i = 0; i < this.length; i++) {
var c = this[i];
if (c == val || (val.equals && val.equals(c))) {
this.splice(i, 1);
break;
}
}
};
阅读https://dev59.com/inA75IYBdhLWcg3w8-LZ#3010848,了解在使用原型与数组时迭代的影响。
Array.prototype.deleteElem = function(val) {
var index = this.indexOf(val);
if (index >= 0) this.splice(index, 1);
return this;
};
var arr = ["orange","red","black","white"];
var arr2 = arr.deleteElem("red");
var arr = ['orange', 'red', 'black', 'white'];
console.info('before: ' + JSON.stringify(arr));
var deleteElem = function ( val ) {
var new_arr = [];
for ( var i = 0; i < this.length; i++ ) {
if ( this[i] !== val ) {
new_arr.push(this[i]);
}
}
return new_arr;
};
arr = deleteElem('red');
console.info('after: ' + JSON.stringify(arr));
最好的方法是使用splice并重建新数组,因为splice后,数组的长度不会改变。
请查看我的答案:
function remove_array_value(array, value) {
var index = array.indexOf(value);
if (index >= 0) {
array.splice(index, 1);
reindex_array(array);
}
}
function reindex_array(array) {
var result = [];
for (var key in array) {
result.push(array[key]);
}
return result;
}
例子:
var example_arr = ['apple', 'banana', 'lemon']; // length = 3
remove_array_value(example_arr, 'banana');
香蕉已被删除,数组长度为2
var arr = ["orange","red","black","white"];
arr.remove = function ( item ) {
delete arr[item];
arr.sort();
arr.pop();
console.log(arr);
}
arr.remove('red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
给你:
arr.deleteElem = function ( val ) {
for ( var i = 0; i < this.length; i++ ) {
if ( this[i] === val ) {
this.splice( i, 1 );
return i;
}
}
};
演示实例: http://jsfiddle.net/4vaE2/3/
deleteElem
方法返回被移除元素的索引。
var idx = arr.deleteElem( 'red' ); // idx is 1