Как удалить значение из массива

222
04 апреля 2018, 10:32

Дано: в массиве имеется user object. Каждый user имеет name и password. У кого в имени найдется буква "r" удалить из данного массива и перенести в другой массив. Маленький пример

var a = [{
    name: "Rixter",
    password: "ksakkd12ks"
}, {
    name: "Rudolf",
    password: "asfsa2sfaa"
}, {
    name: "Masha",
    password: asfefds12
}]

Нужно удалить из данного массива пользователя Rixter и Rudolf и перенести в другой пустой массив

Answer 1

Воспользуйтесь методом filter

var a = [ 
{name: "Rixter", 
password: "ksakkd12ks"}, 
{name: "Rudolf", 
password: "asfsa2sfaa" 
}, 
{name: "Masha", 
password: "asfefds12"}, 
]; 
 
var another_array = a.filter(user => user.name.toLowerCase().includes('r')); 
var a = a.filter(user => !user.name.toLowerCase().includes('r')); 
 
console.log(a, another_array);

Splice:

var a = [ 
    {name: "Rixter", 
    password: "ksakkd12ks"}, 
    {name: "Rudolf", 
    password: "asfsa2sfaa" 
    }, 
    {name: "Masha", 
    password: "asfefds12"}, 
]; 
 
var r_index, r_array = []; 
 
while(-1 != (r_index = a.findIndex(user => user.name.toLowerCase().includes('r')))) 
r_array.push(a.splice(r_index,1)[0]); 
 
console.log(a, '\n\n', r_array);

Answer 2

Модификация ответа @Darth с единственным вызовом filter():

var a = [{ 
    name: "Rixter", 
    password: "ksakkd12ks" 
  }, 
  { 
    name: "Rudolf", 
    password: "asfsa2sfaa" 
  }, 
  { 
    name: "Masha", 
    password: "asfefds12" 
  }, 
]; 
 
let another_array = []; 
a = a.filter(user => { 
  if (user.name.toLowerCase().includes('r')) { 
    another_array.push(user); 
    return false; 
  } 
  return true; 
}); 
console.log(a, another_array);

Answer 3

Если порядок следования пользователей в новом массиве не имеет значения и нужно реализовать именно через splice, то вот ещё один вариант:

let a = [ 
    {name: "Rixter", password: "ksakkd12ks"}, 
    {name: "Rudolf", password: "asfsa2sfaa"}, 
    {name: "Masha", password: "asfefds12"} 
]; 
let b = []; 
for (let i = a.length - 1, r = /r/i; i >= 0; i--) { 
    r.test(a[i].name) && (b = b.concat(a.splice(i, 1))); 
} 
console.log(a); 
console.log(b);

Если порядок важен, то надо только поменять вставку их в массиве - в начало, а не в конец.

READ ALSO
Получить id конференции

Получить id конференции

Пытаюсь получить id конференции, с которой был написан репортНо мне постоянно возвращает в тексте "1", для любой конференции

221
Redirect dosn't work [требует правки]

Redirect dosn't work [требует правки]

Im trying to create my first spa in reactI read that redirect in spa can be done with component

195
Перевести код с Java на JavaScript [требует правки]

Перевести код с Java на JavaScript [требует правки]

Всем привет, название в заголовке:

181