最好的转换方式是什么:
['a','b','c']
to:
{
0: 'a',
1: 'b',
2: 'c'
}
最好的转换方式是什么:
['a','b','c']
to:
{
0: 'a',
1: 'b',
2: 'c'
}
当前回答
如果可以使用Map或Object。分配,很简单。
创建一个数组:
const languages = ['css', 'javascript', 'php', 'html'];
下面的代码创建了一个以index为键的对象:
Object.assign({}, languages)
在地图上复制上面相同的操作
转换为基于索引的对象{0:'css'}等…
const indexMap = new Map(languages.map((name, i) => [i, name] ));
indexMap.get(1) // javascript
转换为一个基于值的对象{css: 'css是伟大的'}等…
const valueMap = new Map(languages.map(name => [name, `${name} is great!`] ));
valueMap.get('css') // css is great
其他回答
如果你使用ES6,你可以使用Object。赋值运算符和展开运算符
{ ...['a', 'b', 'c'] }
如果你有嵌套数组
var arr=[[1,2,3,4]]
Object.assign(...arr.map(d => ({[d[0]]: d[1]})))
最短的答案:(使用解构)
const obj = { ...input }
例子:
const inputArray = ["a", "b", "c"]
const outputObj = { ...inputArray }
如果你正在使用angularjs,你可以使用angular。Extend,与$的效果相同。jquery的扩展。
var newObj = {};
angular.extend(newObj, ['a','b','c']);
我曾多次遇到过这个问题,并决定编写一个尽可能通用的函数。看一看,可以随意修改吗
function typeOf(obj) {
if ( typeof(obj) == 'object' ) {
if (obj.length)
return 'array';
else
return 'object';
} else
return typeof(obj);
}
function objToArray(obj, ignoreKeys) {
var arr = [];
if (typeOf(obj) == 'object') {
for (var key in obj) {
if (typeOf(obj[key]) == 'object') {
if (ignoreKeys)
arr.push(objToArray(obj[key],ignoreKeys));
else
arr.push([key,objToArray(obj[key])]);
}
else
arr.push(obj[key]);
}
}else if (typeOf(obj) == 'array') {
for (var key=0;key<obj.length;key++) {
if (typeOf(obj[key]) == 'object')
arr.push(objToArray(obj[key]));
else
arr.push(obj[key]);
}
}
return arr;
}
用这样的函数:
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()就是这样工作的。