我有一个数组[] this.unusedInstruments
:
[
{ label: 'one'},
{ label: 'two'},
{ label: 'three'}
]
和一个函数:(传入的参数被验证为'one','two'或'three'
removeInstrument: function(removedIntrument) {
var index = this.unusedInstruments.indexOf(removedIntrument);
delete this.unusedInstruments[index];
},
但我没有达到我的预期。我记录了index
,尽管有参数,它仍然会返回-1
。我假设它说索引不存在,但我想这意味着我不知道如何查询索引对象的父数组。
答案 0 :(得分:1)
.indexOf()
仅在字符串是您正在搜索的数组的元素时才有效。但是在您的数据中,字符串是元素的label
属性的值,它不是元素本身。您需要编写一个循环来钻取对象并与属性进行比较。
removeInstrument: function(removedInstrument) {
for (i = 0; i < this.unusedInstruments.length; i++) {
if (this.unusedInstruments[i].label == removedInstrument) {
delete this.unusedInstruments[i];
break;
}
}
}
答案 1 :(得分:1)
只要它是一个数组 - 你不能只是delete
它的元素,否则你会得到一个undefined
值的洞。所以你需要更聪明的方法:
removeInstrument: function(removedInstrument) {
var len = this.unusedInstruments.length,
i;
var remove = function(arr, from) {
// Based on John Resig's article (MIT Licensed)
// http://ejohn.org/blog/javascript-array-remove/
var rest = arr.slice(from + 1);
arr.length = from;
return arr.push.apply(arr, rest);
};
for (i = 0; i < len ; ++i) {
if (this.unusedInstruments[i].label == removedInstrument) {
remove(this.unusedInstruments, i);
break;
}
}
}
remove()
函数实现构思借鉴https://stackoverflow.com/a/9815010/251311