Как пройти цикл, чтобы получить весь адрес?

const name = {
  john: [
    {
      age: 21,
      address: 'LA',
    }
  ],
  sam: [
    {
      age: 26,
      address: 'California'
    }
  ]
}

У меня есть такой код, и я до сих пор не могу понять, как идет поток

const array = Object.entries(name);
for (let i = 0; i < array.length; i++) {
  console.log(array[i]);
}
1
Lend Sham 9 Окт 2021 в 17:38

3 ответа

Лучший ответ

ОБНОВЛЕННЫЙ ОТВЕТ

Если ObjectValue имеет несколько массивов. Пожалуйста, проверьте приведенный ниже код, а также я написал несколько комментариев между кодом.

const name = { john: [ { age: 21, address: 'LA', }, { age: 23, address: 'Franch', } ], sam: [ { age: 26, address: 'California' }, { age: 24, address: 'Swiss' } ] }

var ObjectValues = Object.values(name);


// if single user have multiple data or address apply map method to ObjectValue too

var result = ObjectValues.map((ObjectValue) => {
    return ObjectValue.map(item => item.address);
});

// try to print result before combining
// console.log(result);

// combine all child arrays into single array
result = [].concat.apply([], result);

console.log(result);

Использование цикла forEach и получение всех адресов в одном массиве

const name = { john: [ { age: 21, address: 'LA', }, { age: 23, address: 'Franch', } ], sam: [ { age: 26, address: 'California' }, { age: 24, address: 'Swiss' } ] }

var ObjectValues = Object.values(name);
var result = [];

ObjectValues.forEach((ObjectValue) => {
  ObjectValue.map(item => result.push(item.address));
});

console.log(result);

Просто напишите функцию для лучшей практики

const name = { john: [ { age: 21, address: 'LA', }, { age: 23, address: 'Franch', } ], sam: [ { age: 26, address: 'California' }, { age: 24, address: 'Swiss' } ] }

console.log(getAddress(name));


function getAddress(data) {
  let result = []; // initialize storage
  
  Object.values(data).forEach(ObjectValue => {
    // store address(data)
      ObjectValue.map(item => result.push(item.address));
  });
  return result; // return data
}

СТАРЫЙ ОТВЕТ

Object.entries вернет массивы объекта в паре [ключ, значение]

Поэтому вместо использования Object.entries используйте Object.values ​​(он вернет только список «значений» объекта)

Теперь, после извлечения всего списка значений с помощью Object.values, теперь просто используйте метод map или forEach, чтобы получить весь список адресов.

const name = {
  john: [
    {
      age: 21,
      address: 'LA',
    }
  ],
  sam: [
    {
      age: 26,
      address: 'California'
    }
  ]
}

var ObjectValues = Object.values(name);

// map method
var result = ObjectValues.map(ObjectValue => ObjectValue[0].address);
// here I have used 0 index of an ObjectValue because ObjectValue is an array of single Object of data {age, address}

console.log(result) // check result




// forEach method
var result = []

ObjectValues.forEach(ObjectValue => result.push(ObjectValue[0].address));

console.log('With forEach method (❁´◡`❁)')
console.log(result)
1
Sparrow 9 Окт 2021 в 15:51

В вашем случае name действует больше как хэш-карта, поскольку ключи являются строками (например, john и sam), а не числами (0, 1, 2 и т. Д.). Object.entries() возвращает пары "ключ-значение" (см. MDN ), и поэтому array[i] не работает.

Небольшое изменение цикла, как показано ниже, должно исправить ситуацию:

const array = Object.entries(name);

for (const [key, value] of Object.entries(array)) {
  console.log(`${key}: ${value}`);
  // logs john: [object Object] and sam: [object Object]
}
0
Alvin Teh 9 Окт 2021 в 14:44

Это должно сработать,

Object.values(name).map(([{address}])=>address) // ["LA", "California"]
0
NITHIN PB 9 Окт 2021 в 14:45