【问题标题】:Using splice in javascript remove all elements from array在javascript中使用拼接删除数组中的所有元素
【发布时间】:2015-12-20 18:46:09
【问题描述】:

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

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

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

【问题讨论】:

  • 数组不能有字符串键!
  • @Louy:是的,他们可以。但是,它们不能有字符串 indexes
  • 是的,我猜“key”是一个宾语。
  • 已经有这么多答案了,我只是想知道,为什么需要将对象属性与数组混合?根据我的经验,我不需要将数组与对象混合。
  • splice() 不像 slice() 不会修改原始数组。 splice() 修改数组,并返回删除的元素,这就是为什么你有一个空数组。

标签: javascript arrays


【解决方案1】:

你想要的不是数组而是对象。

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

【讨论】:

    【解决方案2】:

    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,在这种情况下恰好是一个空数组[],因为没有元素被删除了

    【讨论】:

      【解决方案3】:

      使用delete obj[key] 从对象中删除键值对。 Splicearrays 的情况下使用,在object 的情况下使用delete

      var myArray = new Array();
      
      myArray['abc'] = 'abc';
      myArray['cde'] = 'cde';
      myArray['efg'] = 'efg';
      
      delete myArray.abc;
      // or,
      delete myArray['abc'];
      

      【讨论】:

      • 我认为你使用的是myJsonObject
      • 这是一个错字,不是错误的答案,可能是在输入时我认为错误的变量,在这种情况下,您应该在评论中提及它,而不是对答案投反对票。我的想法。
      • 好的。在你更正之后,我还是删除了投票。我认为你是对的。
      • 不是对象字面量,只是对象
      【解决方案4】:

      除了不正确的splice 语法之外,当数据结构是对象时,您还尝试使用数组。

      var obj = {};
      
      obj['abc'] = 'abc';
      obj['cde'] = 'cde';
      obj['efg'] = 'efg';
      

      然后您可以直接从对象中删除该属性:

      var keyToDelete = 'abc';
      delete obj[keyToDelete];
      

      DEMO

      如果你一个数组:

      var arr = ['abc', 'cde', 'efg'];
      

      那么你可以使用拼接,例如在数组的迭代中:

      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

      【讨论】:

        【解决方案5】:
        myArray['abc'] = 'abc';
        

        它不会将项目推送到您的数组中。您刚刚为您的数组创建了 javascript 对象。结果你不能切片你的数组。

        把 myArray 放到你的浏览器控制台。你会看到这个数组是空的。

        【讨论】:

          猜你喜欢
          • 2010-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多