删除数组

时间:2016-09-02 06:50:58

标签: javascript arrays function javascript-objects

kyler决定删除他的帐户。循环遍历你的数组 对象直到你找到kyler的帐号 - 使用kyler@test.com在数组中找到他。 找到他所在的特定索引后,将其从数组中删除。

var users = [{
          name: 'talon',
          email: 'talon@test.com',
          password: 'test1234',
          username: 'tdog',
        },{
          name: 'lauren',
          email: 'lauren@test.com',
          password: 'admin1234',
          username: 'ldogg',
        },{
          name: 'cohen',
          email: 'cohen@test.com',
          password: 'baby1234',
          username: 'cdoggy',
        },{
          name: 'kyler',
          email: 'kyler@test.com',
          password: 'delete1234',
          username: 'kdawg'
        }];

这是我到目前为止所做的,但我正在转动我的车轮:

        function deleteUser(arr)
    for (var i = 0; i < users.length; i++) {
            if (arr.indexOf([i]) === 'kyler@test.com') {
                users.slice(arr[i]);
            }
        }

我不确定我的每个用户是否需要在数组中指定的变量,或者它是否是我的切片。任何指导都会很棒。感谢

3 个答案:

答案 0 :(得分:6)

由于您想要改变原始数组,因此需要splice

function deleteUser(arr, email) {
  for(var i = 0; i < arr.length; i++) {
     if(arr[i].email === email) {
       arr.splice(i, 1)
       return;
     }
  }
}

答案 1 :(得分:4)

在您的代码中,if语句始终为false,因为indexOf方法返回一个整数值,并且您使用===将其与字符串进行比较,因此语句将始终为{{ 1}}(类型不匹配)。第二件事是slice方法不会更新现有数组,它只是制作数组的浅表副本。

要使自己的代码能够正常工作,

  1. 将条件更改为false
  2. 使用Array#splice方法arr[i].email === 'kyler@test.com'删除元素。
  3. 删除元素后,使用users.splice(i,1);
  4. 打破for循环

    最终代码:

    break

    使用 Array#findIndex Array#splice 方法。 Array#findIndex 可用于获取元素索引(对于较旧的浏览器使用简单循环来获取索引)和 Array#splice 方法来删除它使用索引。

     function deleteUser(arr)
       for (var i = 0; i < users.length; i++) {
         if (arr[i].email === 'kyler@test.com') {
            users.slice(i, 1);
            break;
         }
       }
     }
    

    &#13;
    &#13;
    users.splice(users.findIndex(function(v) {
      return v.email == 'kyler@test.com'
    }), 1);
    
    &#13;
    &#13;
    &#13;

    仅供参考:对于较旧的浏览器,请检查polyfill option of findIndex method

    更新或使用简单的var users = [{ name: 'talon', email: 'talon@test.com', password: 'test1234', username: 'tdog', }, { name: 'lauren', email: 'lauren@test.com', password: 'admin1234', username: 'ldogg', }, { name: 'cohen', email: 'cohen@test.com', password: 'baby1234', username: 'cdoggy', }, { name: 'kyler', email: 'kyler@test.com', password: 'delete1234', username: 'kdawg' }]; users.splice(users.findIndex(function(v) { return v.email == 'kyler@test.com' }), 1); console.log(users);循环获得更快且旧浏览器支持的版本;

    while

    &#13;
    &#13;
    var len = users.length;
    // iterate upto `0`
    while (len--) {
      // check the email  value
      if (users.email == 'kyler@test.com') {
        // if true then remove the element and break the while loop
        users.splice(len, 1);
        break;
      }
    }
    
    &#13;
    &#13;
    &#13;

答案 2 :(得分:2)

您可以使用Array.prototype.findIndex()通过提供的测试功能查找数组中元素的索引(在您的情况下,您将检查email属性)。 使用Array.prototype.slice()删除该特定索引处的对象。

下面的示例,您可以看到已从原始阵列中删除了具有该特定电子邮件的用户:

&#13;
&#13;
var users = [{
  name: 'talon',
  email: 'talon@test.com',
  password: 'test1234',
  username: 'tdog',
}, {
  name: 'lauren',
  email: 'lauren@test.com',
  password: 'admin1234',
  username: 'ldogg',
}, {
  name: 'cohen',
  email: 'cohen@test.com',
  password: 'baby1234',
  username: 'cdoggy',
}, {
  name: 'kyler',
  email: 'kyler@test.com',
  password: 'delete1234',
  username: 'kdawg'
}];

var removeUser = function(data, email) {
  var index = data.findIndex(function(item) {
    return item.email === email;
  });
  data.splice(index, 1);
};
removeUser(users,'kyler@test.com');
console.log(users);
&#13;
&#13;
&#13;