将对象数组减少为对象

Sri*_*aru 0 javascript arrays ecmascript-6

我有以下数组

data = [
  { name: 'foo', type: 'fizz', val: 9 },
  { name: 'boo', type: 'buzz', val: 3 },
  { name: 'bar', type: 'fizz', val: 4 },
  { name: 'car', type: 'buzz', val: 7 },
];
Run Code Online (Sandbox Code Playgroud)

我该怎么做

{
    9: 'foo',
    3: 'boo,
    4: 'bar',
    7: 'car'
}
Run Code Online (Sandbox Code Playgroud)

在ES6中。

提前致谢!!

kin*_*ser 5

使用Array#forEach

var data = [ { name: 'foo', type: 'fizz', val: 9 }, { name: 'boo', type: 'buzz', val: 3 }, { name: 'bar', type: 'fizz', val: 4 }, { name: 'car', type: 'buzz', val: 7 }, ], 
    res = {};
    data.forEach(v => res[v.val] = v.name);

    console.log(res);
Run Code Online (Sandbox Code Playgroud)

使用Array#reduce

var data = [ { name: 'foo', type: 'fizz', val: 9 }, { name: 'boo', type: 'buzz', val: 3 }, { name: 'bar', type: 'fizz', val: 4 }, { name: 'car', type: 'buzz', val: 7 }, ],
    res = data.reduce(function(s,a){
      s[a.val] = a.name;
      return s;
    }, {});
  
    console.log(res);
Run Code Online (Sandbox Code Playgroud)