更改 array.map 中的索引



>我有一个形式的变量:

var data=[
{
    start:22,
    end: 8
},
{
    start:60,
    end: 43       
},
{
    start: 35,
    end: 55
},
{
    start:25,
    end:40
}
];

我想将其映射成这样

var newData = { 22:8, 60:43, 35:55, 25:40};

这可能吗?我主要只想使用起始号码作为键来访问结束号码,而无需使用搜索。我尝试这样做:

 var mapData = data.map(function(data){
  var x = {};
  x[data.start]=data.end;
  return x;
});

但它给出了: 0:{22: 8}1:{60: 43}2:{35: 55}3:{25: 40}这意味着我必须使用 0、1、2、3 作为索引。

在这种情况下,

只有Array#map不起作用,因为如果没有后处理,你会得到一个带有对象的数组。您需要将所有对象合并为一个对象。

使用 Object.assign 和 spread 语法... ,您可以获得一个数组,其中包含数组中对象的所有属性。

var data = [{ start: 22, end: 8 }, { start: 60, end: 43 }, { start: 35, end: 55 }, { start: 25, end: 40 }],
    result = Object.assign(...data.map(({ start, end }) => ({ [start]: end })));
    
console.log(result);

您可以使用 array.reduce:

var data=[
{
    start:22,
    end: 8
},
{
    start:60,
    end: 43       
},
{
    start: 35,
    end: 55
},
{
    start:25,
    end:40
}
];
var res = data.reduce((m, o) => { 
  m[o.start] = o.end; 
  return m;
}, {});
console.log(res);

最新更新