使用reduce()更改数组的顺序

时间:2018-05-17 11:43:40

标签: javascript

在示例脚本中,我生成了两个我希望组合成一行的数组:

var testHeaders = ["aLabel", "bLabel", "cLabel","dLabel","eLabel"];

var testValue =  ["aValue","bValue", "cValue","dValue","eValue"];

我想要实现的是像{ aLabel = aValue, bLabel = bValue, ... }这样的字符串,可以用来上传到BigQuery(数据上传工作)。

我找到了一段几乎可以做到这一点的代码,但不知怎的,它改变了两个数组中元素的顺序。

var code = testValue.reduce(function(obj, value, index) {

  obj[testHeaders[index]] = value;
  return obj

}, {})

然而,结果确实混淆了数组的顺序,如下所示。我无法弄清楚订单改变的原因。据我所知,reduce()应该在数组中从左到右工作。

返回的对象是:

{ 
  aLabel = aValue,
  dLabel = dValue,
  bLabel = bValue,
  eLabel = eValue,
  cLabel = cValue
}

2 个答案:

答案 0 :(得分:2)

您可以使用地图和加入:

var testHeaders = ["aLabel", "bLabel", "cLabel","dLabel","eLabel"];
var testValue =  ["aValue","bValue", "cValue","dValue","eValue"];

var res = '{' + testHeaders.map((label, i) => `${label}=${testValue[i]}`).join(',') + '}';

console.log(res);

答案 1 :(得分:-1)

正如vlaz指出的那样,你既不创建字符串,也不创建新数组,而是创建一个对象。就像地图一样,对象在JavaScript中没有设定的键顺序。因此,很有可能在对象中获得另一个订单而不是两个数组。