如何将Javascript对象转换为具有键和值数组的对象?

时间:2020-05-21 13:57:54

标签: javascript arrays javascript-objects

我的数据看起来像

[{"letter": "a", "word" : "apple"}, {"letter": "b", "word":"ball"}, {"letter": "a", "word":"alpha"}, {"letter": "c", "word":"cat"}]

我想将其转换为

{"a":["apple", "alpha"], "b": ["ball"], "c":["cat"]}

3 个答案:

答案 0 :(得分:1)

您可以为此使用reduce函数

const arr = [{"letter": "a", "word" : "apple"}, {"letter": "b", "word":"ball"}, {"letter": "a", "word":"alpha"}, {"letter": "c", "word":"cat"}]

const transformed = arr.reduce((acc, cur) => {
  acc[cur.letter] = acc[cur.letter] || [];
  acc[cur.letter].push(cur.word);
  return acc;
}, {});

console.log(transformed);

答案 1 :(得分:0)

您的意思是这样的

const arr = [{"letter": "a", "word" : "apple"}, {"letter": "b", "word":"ball"}, {"letter": "a", "word":"alpha"}, {"letter": "c", "word":"cat"}];

let result = {};
for (let e of arr)
  (result[e.letter] = result[e.letter] || []).push(e.word);
  
console.log(result)

答案 2 :(得分:-1)

基于更新的结果。下面是我的方法

var elements = [{"letter": "a", "word" : "apple"}, {"letter": "b", "word":"ball"}, {"letter": "a", "word":"alpha"}, {"letter": "c", "word":"cat"}]

output = {}
elements.forEach(function(e){
    key = e['letter']
    value = e['word']
    if(output[key]){
        output[key] = [...output[key], value];
    }else{
        output[key] = [value];
    }
})

console.log(output);