我试图用字符串索引从数组中删除特定元素 但我的所有元素都被移除了
var myArray = new Array();
myArray['abc'] = 'abc';
myArray['cde'] = 'cde';
myArray['efg'] = 'efg';
console.log('before splice:');
console.log(myArray);
myArray = myArray.splice('abc',1);
console.log('after splice:');
console.log(myArray);
before splice:
[abc: "abc", cde: "cde", efg: "efg"]
after splice:
[]
doc在此链接上找到[1]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
没有明确说明索引必须是整数还是其他任何东西
答案 0 :(得分:5)
你想要的不是数组而是对象。
var myObj = {};
myObj['abc'] = 'abc';
myObj['cde'] = 'cde';
myObj['efg'] = 'efg';
// and you can then
delete myObj['abc'];
数组只能有整数索引。
var myArray = new Array();
myArray[0] = 'abc';
myArray[1] = 'cde';
myArray[2] = 'efg';
console.log('before splice:');
console.log(myArray);
myArray.splice(myArray.indexOf('abc'),1);
console.log('after splice:');
console.log(myArray);
答案 1 :(得分:3)
作为JavaScript对象的JavaScript Array
可以具有任意属性。您在代码中所做的是设置3个属性,而不是将元素推送到数组。
console.log('before splice:');
console.log(myArray);
#=> [ abc: 'abc', cde: 'cde', efg: 'efg' ]
console.log(myArray.length);
#=> 0
myArray
之后splice
打印splice
时,Array
的属性不存在,因为[]
返回由已删除元素组成的新UINavigationBar.appearance().barTintColor = UIColor.appThemeColor()
UINavigationBar.appearance().titleTextAttributes = [
NSForegroundColorAttributeName:UIColor.blackColor(),
NSFontAttributeName:UIFont.systemFontOfSize(20.0)
]
UINavigationBar.appearance().tintColor = UIColor.whiteColor()
UITabBarItem.appearance().setTitleTextAttributes([
NSForegroundColorAttributeName:UIColor.whiteColor(),
NSFontAttributeName:UIFont.boldSystemFontOfSize(12.0)
], forState: UIControlState.Selected)
UITabBarItem.appearance().setTitleTextAttributes([
NSFontAttributeName:UIFont.boldSystemFontOfSize(12.0)
], forState: UIControlState.Normal)
UITabBar.appearance().tintColor = UIColor.whiteColor()
UITabBar.appearance().barTintColor = UIColor.appThemeColor()
,在这种情况下恰好是没有元素被删除的空数组spin.min.js
答案 2 :(得分:2)
使用usr/local
从对象中删除键值对。 delete obj[key]
用于Splice
,如果arrays
使用object
,则使用delete
。
var myArray = new Array();
myArray['abc'] = 'abc';
myArray['cde'] = 'cde';
myArray['efg'] = 'efg';
delete myArray.abc;
// or,
delete myArray['abc'];
答案 3 :(得分:0)
myArray['abc'] = 'abc';
它不会将项目推送到您的阵列。您刚刚为您的数组创建了javascript对象。结果你不能分割你的数组。
将myArray放到webbrowser控制台上。您将看到该数组为空。
答案 4 :(得分:0)
除了错误的splice
语法之外,当数据结构是对象时,您尝试使用数组。
var obj = {};
obj['abc'] = 'abc';
obj['cde'] = 'cde';
obj['efg'] = 'efg';
然后,您可以直接从对象中删除该属性:
var keyToDelete = 'abc';
delete obj[keyToDelete];
如果您拥有数组:
var arr = ['abc', 'cde', 'efg'];
然后你可以使用splice,例如在数组的迭代中:
var elToDelete = 'cde';
for (var i = arr.length; i >= 0; i--) {
if (arr[i] === elToDelete) {
arr.splice(i, 1);
}
}
或者你可以使用filter
返回一个不包含该元素的新数组:
var elToDelete = 'cde';
arr = arr.filter(function (el) {
return el !== elToDelete;
});