在javascript中使用splice从数组中删除所有元素

时间:2015-12-20 10:03:25

标签: javascript arrays

我试图用字符串索引从数组中删除特定元素 但我的所有元素都被移除了

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

没有明确说明索引必须是整数还是其他任何东西

5 个答案:

答案 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];

DEMO

如果您拥有数组:

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;
});

DEMO