转换的最佳方法是什么:
['a','b','c']
至:
{
0: 'a',
1: 'b',
2: 'c'
}
原文由 David Hellsing 发布,翻译遵循 CC BY-SA 4.0 许可协议
转换的最佳方法是什么:
['a','b','c']
至:
{
0: 'a',
1: 'b',
2: 'c'
}
原文由 David Hellsing 发布,翻译遵循 CC BY-SA 4.0 许可协议
具有这样的功能:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
rv[i] = arr[i];
return rv;
}
您的数组或多或少已经只是一个对象,但数组确实具有一些关于整数命名属性的“有趣”和特殊行为。上面会给你一个普通的对象。
编辑 哦,你也可能想考虑数组中的“漏洞”:
function toObject(arr) {
var rv = {};
for (var i = 0; i < arr.length; ++i)
if (arr[i] !== undefined) rv[i] = arr[i];
return rv;
}
在现代 JavaScript 运行时中,您可以使用 .reduce()
方法:
var obj = arr.reduce(function(acc, cur, i) {
acc[i] = cur;
return acc;
}, {});
这也避免了阵列中的“漏洞”,因为这就是 .reduce()
的工作原理。
原文由 Pointy 发布,翻译遵循 CC BY-SA 3.0 许可协议
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
ECMAScript 6 引入了易于填充的
Object.assign
:数组自身的
length
属性不会被复制,因为它不可枚举。此外,您可以在对象上使用 ES8 扩展语法 来实现相同的结果:
对于自定义键,您可以使用 reduce :