#javascript #arrays
Вопрос:
var contacts = [ { account: "Acme", firstName: "John", lastName: "Snow" }, { account: "Metal Industries", firstName: "Ted", lastName: "Smith" }, { account: "Acme", firstName: "Sara", lastName: "Butler" }, { account: "HiTech Corp", firstName: "Sam", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Arnold", lastName: "Williams" }, { account: "Metal Industries", firstName: "Jessica", lastName: "Westcoat" }, { account: "Acme", firstName: "Kyle", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Jason", lastName: "Fernandez" } ];
Цель состоит в том, чтобы получить этот результат:
result = { "Acme": ["John Snow", "Kyle Johnson", "Sara Butler"], "HiTech Corp": ["Arnold Williams", "Jason Fernandez", "Sam Johnson"], "Metal Industries": ["Jessica Westcoat", "Ted Smith"] }
Моя функция ниже не возвращает массив значений, а возвращает только последнее значение
const convertArrayToObject = (array, key) =gt; { const initialValue = {} return array.reduce((obj, item) =gt; { return {...obj,[item[key]]: item,} }, initialValue) }
Любая помощь будет признательна
Ответ №1:
Вы были близки, просто не хватало того, что при настройке объекта в результирующем массиве вам нужно установить его как массив — в этом сценарии это было бы [k]: [v]
и не [k]: v
var contacts = [ { account: "Acme", firstName: "John", lastName: "Snow" }, { account: "Metal Industries", firstName: "Ted", lastName: "Smith" }, { account: "Acme", firstName: "Sara", lastName: "Butler" }, { account: "HiTech Corp", firstName: "Sam", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Arnold", lastName: "Williams" }, { account: "Metal Industries", firstName: "Jessica", lastName: "Westcoat" }, { account: "Acme", firstName: "Kyle", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Jason", lastName: "Fernandez" } ]; const convertArrayToObject = (array, key) =gt; { const initialValue = {} return array.reduce((obj, item) =gt; { let k = item[key], v=item.firstName ' ' item.lastName; if (obj[k]) obj[k].push(v); else obj = { ...obj, [k]: [v] } return obj }, initialValue) } console.log(convertArrayToObject(contacts, 'account'))
Ответ №2:
var contacts = [ { account: "Acme", firstName: "John", lastName: "Snow" }, { account: "Metal Industries", firstName: "Ted", lastName: "Smith" }, { account: "Acme", firstName: "Sara", lastName: "Butler" }, { account: "HiTech Corp", firstName: "Sam", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Arnold", lastName: "Williams" }, { account: "Metal Industries", firstName: "Jessica", lastName: "Westcoat" }, { account: "Acme", firstName: "Kyle", lastName: "Johnson" }, { account: "HiTech Corp", firstName: "Jason", lastName: "Fernandez" } ]; const convertArrayToObject = (array, key) =gt; { const initialValue = {} array.forEach((obj, item) =gt; { initialValue[obj[key]] = initialValue[obj.account] || [] initialValue[obj[key]].push(`${obj.firstName} ${obj.lastName}`) }) return initialValue } console.log(convertArrayToObject(contacts, 'account'))