#javascript #json
#javascript #json
Вопрос:
У меня есть следующий объект
calendarLists = [
{Title: titel1, Color:blue, number:1}
{Title: titel2, Color:green, number:2}]
{Title: titel3, Color:red, number:3}
]
У него намного больше свойств, но для простоты я просто покажу 3 свойства. У меня также есть следующий массив [Title,number]
Теперь, основываясь на массиве, я хочу показывать свойство объекта только на основе моего массива. Мои результаты должны быть
results =[{Title: titel1, , number:1},{Title: titel2, , number:2},{Title: titel3, , number:3}]
Комментарии:
1. Итак, вы, по сути, хотите фильтровать
calendarLists
на основе значений в некотором массиве?2. Во-первых, не существует такого понятия, как объект JSON. JSON — это формат строки. Во-вторых, вы не показываете никакого JSON в этом вопросе. В-третьих, у вас нет 3 свойств, у вас есть 3 элемента массива, которые содержат объекты, содержащие свойства. Наконец, что вы пробовали?
3. Вы можете сделать это в одной строке с помощью object-destructuring, если вы отложите массив, указывающий целевые свойства: например
calendarLists.map(({Title,number}) => ({ Title, number }))
. Не отправляйте это в качестве ответа, поскольку оно не соответствует указанным требованиям (основываясь на результатах на свойствах в массиве).
Ответ №1:
Вы могли бы сопоставить требуемые свойства как объекты, собрать их в один объект и сопоставить все объекты для нового массива.
var calendarLists = [
{ Title: 'titel1', Color: 'blue', number: 1 },
{ Title: 'titel2', Color: 'green', number: 2 },
{ Title: 'titel3', Color: 'red', number: 3 }
],
keys = ['Title', 'number'],
result = calendarLists.map(o => Object.assign(...keys.map(k => ({ [k]: o[k] }))));
console.log(result);
То же самое с деструктурирующим назначением и короткими свойствами.
var calendarLists = [
{ Title: 'titel1', Color: 'blue', number: 1 },
{ Title: 'titel2', Color: 'green', number: 2 },
{ Title: 'titel3', Color: 'red', number: 3 }
],
result = calendarLists.map(({ Title, number }) => ({ Title, number }));
console.log(result);
Комментарии:
1. Оба выглядят многообещающе. Как вы думаете, что из двух более эффективно?
2. первый предназначен для динамических свойств, второй — если свойства не изменяются.
3. Хм, у меня есть динамический массив. тогда я перейду к первому решению
Ответ №2:
У ваших calendarLists синтаксическая ошибка. Вы можете сопоставить этот массив и отфильтровать нужные свойства.
calendarLists = [{
Title: 'titel1',
Color: 'blue',
number: 1
},
{
Title: 'titel2',
Color: 'green',
number: 2
},
{
Title: 'titel3',
Color: 'red',
number: 3
}
];
result = calendarLists.map(
calendarList => {
return {
Title: calendarList.Title,
number: calendarList.number
}
}
);
console.log(result);
Комментарии:
1. Это решение вообще не является динамическим