Как мне отфильтровать отметки больше или равные 90 в этом массиве? - PullRequest
0 голосов
/ 02 ноября 2018
let students = [
  {"Name": "Priya","marks": [50, 60, 70, 80, 90]},
  {"Name": "Ankita","marks": [80, 90, 95]}
] 

Результат должен быть таким,

[{"Name": "Priya", "marks": [90]}, {"Name": "Ankita","marks": [90,95]}]

Ответы [ 3 ]

0 голосов
/ 02 ноября 2018

Используйте Array.filter для фильтрации значений массива на основе условия.

Обновить существующий массив (Использовать Array.forEach )

let students = [{"Name": "Priya","marks": [50, 60, 70, 80, 90]},{"Name": "Ankita","marks": [80, 90, 95]}];

students.forEach(o => o.marks = o.marks.filter(v => v >= 90));
console.log(students);

Создать новый массив (Использовать Array.map & Object.assign )

let students = [{"Name": "Priya","marks": [50, 60, 70, 80, 90]},{"Name": "Ankita","marks": [80, 90, 95]}];

let result = students.map(o => Object.assign({}, o, {marks : o.marks.filter(v => v >= 90)}));
console.log(result);
0 голосов
/ 02 ноября 2018

Вы можете использовать .map(), .filter() и Object.assign() методы:

let data = [
  {"Name": "Priya","marks": [50, 60, 70, 80, 90]},
  {"Name": "Ankita","marks": [80, 90, 95]}
];

let result = data.map(
  o => Object.assign(o, {marks: o.marks.filter(v => v >= 90)})
);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 02 ноября 2018

Первый ответ Nikhil изменит исходный массив, что не рекомендуется, поэтому вы можете просто сделать это.

let students = [
      {"Name": "Priya","marks": [50, 60, 70, 80, 90]},
      {"Name": "Ankita","marks": [80, 90, 95]}
    ]

Теперь я хочу отфильтровать отметки, большие или равные 90. Код будет выглядеть следующим образом.

students.map((student) => {
  return {...student, 
          marks: student.marks.filter((mark) => mark >= 90)
         }
}) 
// Result will be [{"Name": "Priya", "marks": [90]}, {"Name": "Ankita","marks": [90,95]}]

Spread operator расширится student, а затем переопределит marks key на filtered marks value.

Если вы не используете оператор распространения,

students.map((student) => student.marks.filter((mark) => mark >= 90))
// Result will be [[90],[90]]

Тогда вы получите только отфильтрованные значения, а не значения, к которым вы не применили фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...