admin管理员组

文章数量:1391955

Is it somehow possible to iterate an array in JS using Array.map() and modify the index values of the resulting array?

// I start with this values:
var arrSource = [
  {id:7, name:"item 1"}, 
  {id:10, name:"item 2"},
  {id:19, name:"item 3"},
];

var arrResult = arrSource.map(function(obj, index) {
    // What to do here?
    return ???; 
});

/*
This is what I want to get as result of the .map() call:

arrResult == [
  7: {id:7, name:"item 1"}, 
  10: {id:10, name:"item 2"},
  19: {id:19, name:"item 3"},
];
*/

Is it somehow possible to iterate an array in JS using Array.map() and modify the index values of the resulting array?

// I start with this values:
var arrSource = [
  {id:7, name:"item 1"}, 
  {id:10, name:"item 2"},
  {id:19, name:"item 3"},
];

var arrResult = arrSource.map(function(obj, index) {
    // What to do here?
    return ???; 
});

/*
This is what I want to get as result of the .map() call:

arrResult == [
  7: {id:7, name:"item 1"}, 
  10: {id:10, name:"item 2"},
  19: {id:19, name:"item 3"},
];
*/
Share Improve this question edited Aug 24, 2016 at 18:29 Philipp asked Aug 16, 2016 at 19:16 PhilippPhilipp 11.4k9 gold badges69 silver badges74 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 3

No. Array#map performs a 1:1 mapping (so to speak).

You'd have to create a new array and explicitly assign the elements to the specific indexes:

var arrResult = [];
arrSource.forEach(function(value) {
   arrResult[value.id] = value;
});

Of course you can use .reduce for that too.

Of course you can do it as follows;

var arrSource = [
  {id:7, name:"item 1"}, 
  {id:10, name:"item 2"},
  {id:19, name:"item 3"},
];

newArr = arrSource.map((e,i,a) => a[a.length-1-i]);
console.log(newArr)

Yes... always the source array gets mutated if you need some irregularities with Array.prototype.map() such as

var arrSource = [
  {id:7, name:"item 1"}, 
  {id:10, name:"item 2"},
  {id:19, name:"item 3"},
];

newArr = arrSource.map((e,i,a) => a[a.length] = e);
console.log(JSON.stringify(arrSource,null,4));

which is not surprising.

本文标签: javascriptChange array index with arraymap()Stack Overflow