Есть ли способ отображать только выбранное свойство в объекте json на основе массива

#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. Это решение вообще не является динамическим