#javascript
#javascript
Вопрос:
API, который я вызываю, выдает результат, подобный следующему:
{
"name1" : "value1",
"name2" : "value2",
"name3" : "value3",
"name4" : "value4",
}
Я хочу изменить преобразовать это в
[
{"name1" : "value1"},
{"name2" : "value2"},
{"name3" : "value3"},
{"name4" : "value4"},
[
Я пытался использовать
Object.keys(result).forEach(function(key) {
console.log(key, result[key]);
let item = key;
policyStatusList.push(
new Object({
item: result[key]
})
);
});
но в итоге получилось так
[
{"item" : "value1"},
{"item" : "value2"},
{"item" : "value3"},
{"item" : "value4"},
[
Есть предложения?
Комментарии:
1. используйте policyStatusList.push({[ключ]: результат [ключ]}) , и нет необходимости в item = key , в остальном все в порядке. В вашем коде элемент будет приниматься как строка, а не как переменная, если вы хотите передать переменную в качестве ключа в объекте, вам нужно использовать [key];
2. Нет, вы этого не хотите.
3. @AZ_ итак, очевидно, мне просто нужно было добавить скобки к элементу спасибо; спасибо за помощь всем, приму ответ CertainPerformance, хотя, поскольку он намного эффективнее, чем мой текущий код
4. @RaphaelEstrada да, ваш код неэффективен, просто указываю, что не так.
Ответ №1:
.map
Object.entries
объекта:
const obj = { "name1" : "value1", "name2" : "value2", "name3" : "value3", "name4" : "value4" };
const arrOfObjs = Object.entries(obj).map(([key, val]) => ({ [key]: val }));
console.log(arrOfObjs);
Ответ №2:
Вы могли бы использовать методы reduce
и concat
.
var obj = { "name1" : "value1", "name2" : "value2", "name3" : "value3", "name4" : "value4" }
var res = Object.keys(obj).reduce((result, item) => result.concat([{[item] : obj[item]}]), []);
console.log(res);
Ответ №3:
Попробуйте:
const obj = {
"name1" : "value1",
"name2" : "value2",
"name3" : "value3",
"name4" : "value4"
};
const convertedArray = Object.entries(obj).map(([key, val]) => ({
[key]: val
}));
console.log(convertedArray);
Ответ №4:
Я хочу изменить convert это на …
Нет, вы, вероятно, этого не хотите. Структура данных, возвращаемая API, великолепна, потому что
1) Вы можете легко получить значение для определенного ключа, например obj.name1
2) Вы можете легко получить все ключи ( Object.keys(obj)
), значения ( Object.values(obj)
) и пары ключ-значение ( Object.entries(obj)
) для повторения.
Со структурой данных, которую вы «хотите» получить, вы не можете ни:
1) найдите значение, поскольку вам пришлось бы перебирать массив и искать ключ в каждом объекте, что действительно медленно и некрасиво.
2) Выполните итерацию по ключам, значениям и парам ключ-значение, поскольку вам пришлось бы извлекать ключ и значение из каждого объекта, что сложно.
Так что нет, вы этого не хотите.
Ответ №5:
Ваша проблема в том, что вы создаете свой новый объект с помощью ключа item
— вы хотите использовать ключ [item]
(значение именованной переменной item
, а не буквальную строку item
):
const result = {
"name1" : "value1",
"name2" : "value2",
"name3" : "value3",
"name4" : "value4"
};
let policyStatusList = [];
Object.keys(result).forEach(function(key) {
let item = key;
policyStatusList.push(
new Object({
[key]: result[key]
})
);
});
console.log(policyStatusList);