具有来自给定数组键的键/值对的对象数组&值

时间:2017-09-17 05:25:49

标签: javascript arrays

我正在尝试返回一组键值对:来自给定数组键的[{"a": 1},{"b": 2},{"c": 3}]["a", "b", "c"]和一组值:[1, 2, 3]

我试过这个:

let arr = [], obj = {}, key, val;
const keyValuePairs = (k, v) => {
  if (k.length === v.length) {
    for (var i = 0; i < k.length; i++) {
      key = k[i]; val = v[i];
      arr[i] = {key: val};
    }
  } return arr;
};

keyValuePairs(["a", "b", "c"], [1, 2, 3]);

但它正在回归 - [ { key: 1 }, { key: 2 }, { key: 3 } ]

我该怎么做?

5 个答案:

答案 0 :(得分:1)

如果你定位一个足够新的浏览器,或者正在使用babel,那么有一种新的语法可以轻松实现这一点:

arr[i] = {[key]: val};

否则您将需要使用多行来设置密钥

let arr = [], obj = {}, key, val;
const keyValuePairs = (k, v) => {
  if (k.length === v.length) {
    for (var i = 0; i < k.length; i++) {
      key = k[i]; val = v[i];
      var newObj = {};
      newObj[key] = val;
      arr[i] = newObj;
    }
  } return arr;
};

只是一般代码注释:你有一堆变量超出了函数的范围。它也很啰嗦。您可以像这样编写整个函数:

const keyValuePairs = (k, v) => (
    k.map((key, index) => ({ [key]: v[index] }))
);

答案 1 :(得分:0)

&#13;
&#13;
a = ["a", "b", "c"], b = [1, 2, 3]

c = a.map((k, i) => ({[k]: b[i]}))

console.log(JSON.stringify(c))
&#13;
&#13;
&#13;

How do I zip two arrays in JavaScript?

答案 2 :(得分:0)

试试这个(简单的解决方案):

&#13;
&#13;
var answer = keyValuePairs(["a", "b", "c"], [1, 2, 3]);
console.log(answer);

function keyValuePairs(arrOne, arrTwo){
     var returnArr = [];
     for(var i = 0; i < arrOne.length; i++){
        var obj = {};
        obj[arrOne[i]] = arrTwo[i];
        returnArr[i] = obj;
     }
     
     return returnArr;
  
}
&#13;
&#13;
&#13;

答案 3 :(得分:0)

使用lodash,您可以使用_.map或vanilla Array.prototype.map在一行中执行此操作,并使用索引i对数组进行条带化。

var keys = 'abc'.split('');
var values = '123'.split('');
var result = _.map(keys, (key, i) =>  ( { [keys[i]] : values[i] } ) );
console.log(JSON.stringify(result));

收率: [{"a":"1"},{"b":"2"},{"c":"3"}]

你也可以在尺寸上继续这种模式:

var keys = 'abc'.split('');
var values = '123'.split('');
var valuesValues = 'xyz'.split('');
var result = _.map(keys, (key, i) => ( { [keys[i]] : { [ values[i] ]: valuesValues[i] } } ) );
console.log(JSON.stringify(result));

收率: [{"a":{"1":"x"}},{"b":{"2":"y"}},{"c":{"3":"z"}}]

答案 4 :(得分:0)

  

您也可以根据自己的要求使用reduce方法。

见下面的例子..

&#13;
&#13;
let keys = ["a", "b", "c"], 
    values = [1, 2, 3],
    result = keys.reduce((r,v,i)=>r.concat({[v]:values[i]}),[]);

console.log(result);;
&#13;
&#13;
&#13;