JavaScript как извлечь свойства массива в другой массив? - PullRequest
2 голосов
/ 24 марта 2020

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

Моя первая задача - получить поле имена первого массива, поступающего с первого сервера, отображают их пользователю, редактируют их, а затем, используя array.map(), я создам новый массив с именами полей, определенных пользователем.

Мой первый шаг - получить имена основных полей массива. Допустим, у меня есть следующее:

array = [{'name': 'John', 'lastname' :'Doe'},{'name': 'Roe', 'lastname' :'Doe'}]

Результат будет выглядеть так:

arrayFields = [{name, lastname}]

Я пытался использовать getOwnPropertyNames():

getProp(){
    console.log(Object.getOwnPropertyNames(this.array))
}

Результат было похоже:

["0", "1", "длина"]

0: "0"

1: "1"

2: "длина"

Затем я попытался с Object.assign(), как указано в этом стеке вопрос :

 getObject(){
    let newObject = (Object.assign(this.array))
    console.log(Object.getOwnPropertyNames(newObject))
 }

Но это был такой же как и предыдущий результат.

Вот stackblitz , с которым я работаю.

Требуемый результат имеет вид: ["name", "lastname"]

Ответы [ 4 ]

2 голосов
/ 24 марта 2020

Вы также можете использовать комбинацию Set() и .flatMap(). Используя их у вас есть более гибкий способ , чтобы извлечь все свойства из каждого элемента исходного массива. Например, если у вас разные свойства в некоторых элементах.

Попробуйте выполнить следующее:

const array = [{'name': 'John', 'lastname' :'Doe'},{'name': 'Roe', 'lastname' :'Doe'}];

const result = new Set(array.flatMap(e => Object.keys(e), []));

console.log(Array.from(result));

Надеюсь, это поможет!

1 голос
/ 24 марта 2020

Другой вариант будет:

let keySet = new Set();
this.array.forEach(e => Object.keys(e).forEach(i => keySet.add(i)));
console.log("keySet : ", Array.from(keySet));
1 голос
/ 24 марта 2020

Ваша функция getProp () почти правильная, за исключением того, что вам нужно вызвать getOwnPropertyNames для элемента в массиве:

getProp(){
    console.log(Object.getOwnPropertyNames(this.array[0]));
}
1 голос
/ 24 марта 2020

Если они все в одном формате, вы можете взять первый элемент и извлечь его ключи:

const a = [{'name': 'John', 'lastname' :'Doe'},{'name': 'Roe', 'lastname' :'Doe'}];
const dummyEntry = a[0];
console.log(Object.keys(dummyEntry));

Для ваших объектов это даст [ "name", "lastname" ]

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