在 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
所以我知道如何像这样动态设置密钥:
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