37 javascript
我有两个数组:newParamArr[i]和paramVal[i].
newParamArr[i]数组中的示例值:
["Name", "Age", "Email"]
paramVal[i]数组中的示例值:
["Jon", "15", "jon@gmail.com"]
我需要创建一个JavaScript对象,将数组中的所有项放在同一个对象中.例如
{newParamArr[0]:paramVal[0], newParamArr[1]:paramVal[1], ...}
两个数组的长度始终相同,但数组的长度可以增加或减少.如...
newParamArr.length === paramVal.length 将永远返回true.
以下帖子都没有帮助回答我的问题:
geo*_*org 64
你是说这个吗?
var keys = ['foo', 'bar', 'baz'];
var values = [11, 22, 33]
var result = {};
keys.forEach((key, i) => result[key] = values[i]);
console.log(result);Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 Object.assign
result = Object.assign(...keys.map((k, i) => ({[k]: values[i]})))
Run Code Online (Sandbox Code Playgroud)
或对象扩展语法(ES2018):
result = keys.reduce((o, k, i) => ({...o, [k]: values[i]}), {})
Run Code Online (Sandbox Code Playgroud)
如果你正在使用lodash,那么这个类型的东西就是_.zipObject.
使用 ECMAScript2015:
const obj = newParamArr.reduce((obj, value, index) => {
obj[value] = paramArr[index];
return obj;
}, {});
Run Code Online (Sandbox Code Playgroud)
(编辑)以前误解了 OP 想要一个数组:
const arr = newParamArr.map((value, index) => ({[value]: paramArr[index]}))
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经有一年了,但这里有一个单行解决方案:
Object.assign( ...newParamArr.map( (v, i) => ( {[v]: paramVal[i]} ) ) );
Run Code Online (Sandbox Code Playgroud)
我在几个地方需要这个所以我做了这个功能......
function zip(arr1,arr2,out={}){
arr1.map( (val,idx)=>{ out[val] = arr2[idx]; } );
return out;
}
console.log( zip( ["a","b","c"], [1,2,3] ) );
> {'a': 1, 'b': 2, 'c': 3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25973 次 |
| 最近记录: |