#javascript #arrays #json #knockout.js
#javascript #массивы #json #knockout.js
Вопрос:
У меня есть следующий массив JSON:
AccessToFinancialServicesRule: {Clean: 3, Copy: 3}
BoardParticipationRule: {Clean: 3, Copy: 3}
Documents: null
EconomicDevelopmentRule: {Clean: 3, Copy: 3}
EmployeeStructureRule: {Clean: 3, Copy: 3}
EmpowermentFinanceRule: {Clean: 3, Copy: 3}
EnterpriseDevelopmentRule: {Clean: 3, Copy: 3}
OwnershipRule: {Clean: 3, Copy: 3}
PreferentialProcurementRule: {Clean: 3, Copy: 3}
ResponsibleSocialMarketingRule: {Clean: 3, Copy: 3}
SkillsDevelopmentRule: {Clean: 3, Copy: 3}
SocioEconomicDevelopmentRule: {Clean: 3, Copy: 3}
SupplierDevelopmentRule: {Clean: 3, Copy: 3}
и я пытаюсь преобразовать его в массив, который выглядит следующим образом
0: {label: "Ownership", clean: 3, copy: 3}
1: {label: "Skills<br>Development", clean: 3, copy: 3}
2: {label: "Localisation", clean: 3, copy: 3}
3: {label: "Socio-Economic<br>Development", clean: 3, copy: 3}
4: {label: "Board Participation", clean: 3, copy: 3}
5: {label: "Employee Structure", clean: 3, copy: 3}
6: {label: "Preferential Procurement", clean: 3, copy: 3}
7: {label: "Enterprise Development", clean: 3, copy: 3}
8: {label: "Supplier Development", clean: 3, copy: 3}
где каждый элемент вызывается label
и показывает clean
и copy
Я попробовал следующее:
var allItems = [data.Mappings];
var testData = allItems.map(function(item){
return {
'label': item,
'clean': item.Clean,
'copy':item.Copy
};
});
console.log(testData)
но это, похоже, не работает, это превращает все в один объект, подобный этому:
0:
clean: undefined
copy: undefined
label: {OwnershipRule: {…}, BoardParticipationRule: {…}, SkillsDevelopmentRule: {…}, EmployeeStructureRule: {…}, PreferentialProcurementRule: {…}, …}
Что я делаю не так?
Комментарии:
1. Ваши данные не в массиве, вы имели в виду, что это массив объектов?
2. @netizen да, массив объекта
Ответ №1:
Вам нужно использовать Object.keys
для доступа к свойствам в объектах вот пример:
const convertToArray = array.map((item) => {
const key = Object.keys(item)
if (item[key]) {
return {
label: key[0],
clean: item[key].Clean,
copy: item[key].Copy
}
}
})
Проверьте ссылку для полного примера: https://jsfiddle.net/qgwxbuem /
Комментарии:
1. Object.keys возвращает массив, добавьте [0] или .shift()
2. Теперь это работает, хотя я бы поставил его на присвоение ключу, потому что следующая строка все еще проверяет массив