Как извлечь объект (массив) из массива объектов? - PullRequest
1 голос
/ 25 февраля 2020

Скажем, у меня есть следующий набор данных:

const art = {
    'fields': [
        {title:'Title 1'}, 
        {'text': [
            {spaces: '1'}, {link: 'This is a link'}, {mouse: 'Yes'}
        ]}, 
        {title: 'Title 2'}, 
        {title:'Title 3'},
        {'text': [
            {spaces: '2'}, {link: 'This is a different link'}, {mouse: 'No'}
        ]},
    ]};

Я хотел бы извлечь новый объект (массив) из свойства "pace ". В дополнение к этому мне нужно идентифицировать те объекты «заголовка», которые не имеют связанного с ними свойства «пробелы», с пустым значением.

Я бы хотел получить что-то вроде этого:

newArray = ['', '1', '', '', '2']

Возможно ли это? Прости меня, если моя терминология не очень хороша. Новое в этом.

Ответы [ 4 ]

1 голос
/ 25 февраля 2020

Это не должно быть слишком сложно. Попробуйте Javascript s map() function ...

const art = {
    'fields': [
        {title:'Title 1'}, 
        {'text': [
            {spaces: '1'}, {link: 'This is a link'}, {mouse: 'Yes'}
        ]}, 
        {title: 'Title 2'}, 
        {title:'Title 3'},
        {'text': [
            {spaces: '2'}, {link: 'This is a different link'}, {mouse: 'No'}
        ]},
    ]};

const spaces = art.fields.map(function(field) {
  if(field.text) {
    return field.text[0].spaces;
  }
  return '';
});

console.log("Spaces?");

console.log(spaces);

И результаты ...

"Spaces?"
["", "1", "", "", "2"]

См. Код, работающий на JSBIN . Map возвращает результат функции для итерации по массиву. Проверьте Документы для разработчиков Mozilla на нем.

0 голосов
/ 25 февраля 2020

если ваш текстовый массив будет иметь несколько пробелов, то он должен пройти через него oop и добавить значение пробелов, как показано ниже:

const art = {
  'fields': [{
      title: 'Title 1'
    },
    {
      'text': [{
        spaces: '1'
      }, {
        link: 'This is a link'
      }, {
        mouse: 'Yes'
      }]
    },
    {
      title: 'Title 2'
    },
    {
      title: 'Title 3'
    },
    {
      'text': [{
        spaces: '2'
      }, {
        link: 'This is a different link'
      }, {
        mouse: 'No'
      }]
    },
  ]
};


var res = art.fields.reduce((ini, curr, idx) => {
  if (curr.text) {
    curr.text.forEach(arr => {
      arr.spaces && ini.push(arr.spaces);
    });
  } else {
    ini.push('');
  }
  return ini;
}, [])
console.log(res);
0 голосов
/ 25 февраля 2020

Вы можете использовать метод map для вычисления значения для каждого элемента в массиве art.fields.

const art = {
    'fields': [
        {title:'Title 1'}, 
        {'text': [
            {spaces: '1'}, {link: 'This is a link'}, {mouse: 'Yes'}
        ]}, 
        {title: 'Title 2'}, 
        {title:'Title 3'},
        {'text': [
            {spaces: '2'}, {link: 'This is a different link'}, {mouse: 'No'}
        ]},
    ]};

var newArray = art.fields.map(function(o){
  return 'text' in o ? o.text[0].spaces : '';
});

console.log(newArray);
0 голосов
/ 25 февраля 2020

вы можете сделать что-то вроде этого

const newArr = art.fields.map(space => {
  return {...space.text}
});

, поэтому я предполагаю, что вы хотите вернуть новый массив, содержащий объект текстового массива

...