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

ct2axkht  于 2022-11-20  发布在  Java
关注(0)|答案(6)|浏览(323)

我试图从带有字符串索引的数组中删除一个特定的元素,但是所有的元素都被删除了。

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:
[]

在此链接[1]上找到文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
没有明确说明index必须是整数还是其他值

46qrfjad

46qrfjad1#

这里需要的不是数组而是对象。

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

yruzcnhs2#

JavaScript Array是一个JavaScript对象,可以有任意的属性。你在代码中所做的是设置3个属性,而不是将元素推入数组。

console.log('before splice:');
console.log(myArray);
#=> [ abc: 'abc', cde: 'cde', efg: 'efg' ]
console.log(myArray.length);
#=> 0

当您在splice之后打印myArray时,这些属性不存在,因为splice返回一个由删除的元素组成的新Array,在本例中,由于没有删除任何元素,因此它恰好是一个空数组[]

n9vozmp4

n9vozmp43#

使用delete obj[key]从对象中删除键值对。如果是arrays,则使用Splice;如果是object,则使用delete

var myArray = new Array();

myArray['abc'] = 'abc';
myArray['cde'] = 'cde';
myArray['efg'] = 'efg';

delete myArray.abc;
// or,
delete myArray['abc'];
ygya80vv

ygya80vv4#

除了不正确的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

csga3l58

csga3l585#

myArray['abc'] = 'abc';

它不会将项推到数组中,你只是在数组中创建了javascript对象,结果你不能对数组进行切片。
将myArray放到Web浏览器控制台。您将看到该数组为空。

hgncfbus

hgncfbus6#

如果您想了解如何使用splice从数组中删除所有成员,那么答案很简单:

const arr = [1,2,3,4];
arr.splice(0); //[1,2,3,4] 
// arr = []

splice(startPosition, pcsToRemove)
第一个0告诉接合从数组的最开头开始。

  • 不设置第二个参数将默认拼接整个阵列。*

这里不回答作者的问题,只回答标题:
在javascript中使用splice删除数组中的所有元素

相关问题