在 javascript 中的 map() 中动态设置密钥?

Set key dynamically inside map() in javascript?

所以我知道如何像这样动态设置密钥:

var hashObj = {};
hashObj[someValue] = otherValue;

但是我还没有看到关于map()的任何答案:

var list = ['a', 'b', 'c'];

var hashObject = list.map(function(someValue) {
    return { someValue: 'blah' };
});

// should return: [ {'a': 'blah'}, {'b': 'blah'}, {'c': 'blah'} ];

我知道我可以在 for 循环中这样做,但是在 javascript 中仅使用 map() 是不可能的吗?

你需要得到someValue才能被评估为它的价值。如果您使用对象表示法,它将按字面解释为字符串。

你可以使用一个临时对象来实现你想要的:

var list = ['a', 'b', 'c'];

var hashObject = list.map(function(someValue) {
    var tmp = {};
    tmp[someValue] = 'blah';
    return tmp;
});

通常 'map()' 方法用于从每个 return 值获取新数组。 对于您的情况,我建议使用 forEach().

var list = ['a','b','c'];
var hashObject = {};
list.forEach( function( key ) {
    hashObject[ key ] = 'blah';
});

或使用 underscore.js 库的 object()

var list = ['a','b','c'];
var hashObject = _.object( list ); // { a: undefined, b: undefined, c: undefined }
hashObject = _.mapObject( hashObject, function( val, key ) {
    return 'blah';
});

然后,Array.prototype.map 仅用于获取新的 'array' 而不是 'object'。

我知道这是个老问题,但回答对其他人有帮助。

上面已经说过了,Array.prototype.map是用来获取新的array的。

但是如果你想获得 object 而不是 array - 也许你应该考虑使用 Array.prototype.reduce (https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)?

const list = ['a', 'b', 'c'];

const hashObject = list.reduce((acc, current) => {
  acc[current] = 'blah';
  return acc;
}, {});

// hashObject equals: {"a":"blah","b":"blah","c":"blah"}

如果你想达到你问题中提到的相同结果,你当然可以使用Array.prototype.map

const list = ['a', 'b', 'c'];

const hashArrayOfObjects = list.map((current) => {
  return {[current]: 'blah'};
});

// hashArrayOfObjects equals: [{"a":"blah"},{"b":"blah"},{"c":"blah"}]

您可以在 CodePen 上查看它是如何工作的:https://codepen.io/grygork/pen/PojNrXO