arr.push (arr.splice (n, 1)) «глотает» свойство перемещенного объекта - PullRequest
0 голосов
/ 29 октября 2018

например, я хочу поместить средний элемент в последний:

let students=[
    {"name":"a","uid":"001"},
    {"name":"b","uid":"002"},
    {"name":"c","uid":"003"},
    {"name":"d","uid":"004"},
    {"name":"e","uid":"005"},
];
students.push(students.splice(students.length/2,1));
console.log(students.length);
for(let s of students){
  console.log(s.name+':'+s.uid+',');
}

но свойство последнего элемента становится неопределенным, несмотря на то, что количество элементов не изменилось, почему это произошло?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

метод сращивания всегда возвращает массив, а не объект. Таким образом, в вашем коде 5-й элемент является массивом, поэтому он дает неопределенное значение. Просто замените эту строку, она будет работать нормально

students.push(...students.splice(students.length/2,1));

чтобы узнать о Маре ... (оператор покоя) нажмите здесь

    let students=[
        {"name":"a","uid":"001"},
        {"name":"b","uid":"002"},
        {"name":"c","uid":"003"},
        {"name":"d","uid":"004"},
        {"name":"e","uid":"005"},
    ];
    students.push(...students.splice(students.length/2,1));
    console.log(students.length);
    for(let s of students){
      console.log(s.name+':'+s.uid+',');
    }
0 голосов
/ 20 января 2019

Splice всегда возвращает массив, используйте spread operator для извлечения объекта.

let students=[
  {"name":"a","uid":"001"},
  {"name":"b","uid":"002"},
  {"name":"c","uid":"003"},
  {"name":"d","uid":"004"},
  {"name":"e","uid":"005"},
];

students.push(...students.splice(students.length/2,1));

for(let s of students){
  console.log(s.name+':'+s.uid+',');
}
0 голосов
/ 29 октября 2018

splice всегда возвращает массив , даже когда удаляется только один элемент. Если вы хотите push удалить student, вам придется сначала извлечь его из массива, в противном случае вы перемещаете массив в students (а не в объект студента):

let students=[
    {"name":"a","uid":"001"},
    {"name":"b","uid":"002"},
    {"name":"c","uid":"003"},
    {"name":"d","uid":"004"},
    {"name":"e","uid":"005"},
];
const [student] = students.splice(students.length/2,1);
students.push(student);
// or
// students.push(students.splice(students.length/2,1)[0]);
console.log(students.length);
for(let s of students){
  console.log(s.name+':'+s.uid+',');
}
...