什么是最好的转换方式:
['a','b','c']
到:
{
0: 'a',
1: 'b',
2: 'c'
}
['a','b','c']
到:
{
0: 'a',
1: 'b',
2: 'c'
}
var obj = _.toPlainObject(['a', 'b', 'c']);
console.log(obj);
<script src="https://cdn.jsdelivr.net/lodash/4.16.4/lodash.min.js"></script>
.reduce((o,v,i)=>(o[i]=v,o), {})
var trAr2Obj = function (arr) {return arr.reduce((o,v,i)=>(o[i]=v,o), {});}
或者
var transposeAr2Obj = arr=>arr.reduce((o,v,i)=>(o[i]=v,o), {})
JSON.stringify([["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[i]=v,o}, {}))
=> "{"0":["a","X"],"1":["b","Y"]}"
[["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[v[0]]=v.slice(1)[0],o}, {})
=> Object {a: "X", b: "Y"}
function(e) {console.log(e); return e;}
等同于 (e)=>(console.log(e),e)
) nodejs
> [[1, 2, 3], [3,4,5]].reduce((o,v,i)=>(o[v[0]]=v.slice(1),o), {})
{ '1': [ 2, 3 ], '3': [ 4, 5 ] }
[/文档]
[/docs]
中的意图是什么?将代码片段变为可执行的会更有用。 - Dan DascalescuMap
或Object.assign
,那么这很容易。const languages = ['css', 'javascript', 'php', 'html'];
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
ES5 - 解决方案:
使用 Array 原型函数 'push' 和 'apply',您可以将数组元素填充到对象中。
var arr = ['a','b','c'];
var obj = new Object();
Array.prototype.push.apply(obj, arr);
console.log(obj); // { '0': 'a', '1': 'b', '2': 'c', length: 3 }
console.log(obj[2]); // c
{ name: a, div :b, salary:c}
怎么办? - Prashant Pimpalelet i = 0;
let myArray = ["first", "second", "third", "fourth"];
const arrayToObject = (arr) =>
Object.assign({}, ...arr.map(item => ({[i++]: item})));
console.log(arrayToObject(myArray));
或者使用
myArray = ["first", "second", "third", "fourth"]
console.log({...myArray})
Array.of()
来完成这个任务。 Array of能够将其上下文用作构造函数。
因此,我们可以将注意2:of函数是一个特意通用的工厂方法;它不要求它的this值是Array构造函数。因此,它可以被转移到或继承到其他构造函数中,这些构造函数可能会使用单个数字参数进行调用。
Array.of()
绑定到一个函数,并生成类似数组的对象。
function dummy(){};
var thingy = Array.of.apply(dummy,[1,2,3,4]);
console.log(thingy);
Array.of()
,甚至可以进行数组子类化。点击此处了解更多信息。const arrayToObject = <T extends Record<K, any>, K extends keyof any>(
array: T[] = [],
getKey: (item: T) => K,
) =>
array.reduce((obj, cur) => {
const key = getKey(cur)
return ({...obj, [key]: cur})
}, {} as Record<K, T>)
它将会:
示例:
// from:
const array = [
{ sid: 123, name: 'aaa', extra: 1 },
{ sid: 456, name: 'bbb' },
{ sid: 789, name: 'ccc' }
];
// to:
{
'123': { sid: 123, name: 'aaa' },
'456': { sid: 456, name: 'bbb' },
'789': { sid: 789, name: 'ccc' }
}
使用方法:
const obj = arrayToObject(array, item => item.sid) // ok
const obj = arrayToObject(array, item => item.extra) // error
${val}
;
}, '') })
}, {} as Record<K, T>); - Mecanik这是我刚写的一个递归函数。它很简单,而且运行得很好。
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
var array = new Array();
array.a = 123;
array.b = 234;
array.c = 345;
var array2 = new Array();
array2.a = 321;
array2.b = 432;
array2.c = 543;
var array3 = new Array();
array3.a = 132;
array3.b = 243;
array3.c = 354;
var array4 = new Array();
array4.a = 312;
array4.b = 423;
array4.c = 534;
var array5 = new Array();
array5.a = 112;
array5.b = 223;
array5.c = 334;
array.d = array2;
array4.d = array5;
array3.d = array4;
array.e = array3;
console.log(array);
// Convert array to object
var convArrToObj = function(array){
var thisEleObj = new Object();
if(typeof array == "object"){
for(var i in array){
var thisEle = convArrToObj(array[i]);
thisEleObj[i] = thisEle;
}
}else {
thisEleObj = array;
}
return thisEleObj;
}
console.log(convArrToObj(array));
['a' = '1', 'b' = '2', 'c' = '3']
,并且想要得到{a: 1, b: 2, c: 3}
这样的结果,那么这段代码应该放在更高的位置。 - Wanjia尝试使用反射从数组项复制到对象。
var arr =['aa:23','bb:44','cc:55']
var obj ={}
arr.forEach(e => {
var ee = e.split(':')
Reflect.set(obj,ee[0],ee[1])
});
console.log(obj) // { aa: '23', bb: '44', cc: '55' }
_.keyBy
(以前称为_.indexBy
):https://lodash.com/docs#keyBy - 2540625_.toPlainObject
。例如:var myObj = _.toPlainObject(myArr)
。 - julian soro