Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中要散列的数组_Javascript_Node.js - Fatal编程技术网

Javascript中要散列的数组

Javascript中要散列的数组,javascript,node.js,Javascript,Node.js,我在node_redis模块中使用ZRANK函数,并带有“WithCores”选项,它返回以下格式的数组: 可用 [value1, score1, value2, score2,...,valueN, scoreN]. NodeJS中是否有一种简单的方法将其转换为以下格式的哈希数组: 所需格式 [{value1 : score1}, {value2 : score2},..., {valueN : scoreN}] 我不确定这个问题以前是否有人回答过。我找不到任何东西。丑陋(不再粗鲁)它完

我在node_redis模块中使用ZRANK函数,并带有“WithCores”选项,它返回以下格式的数组:

可用

[value1, score1, value2, score2,...,valueN, scoreN].
NodeJS中是否有一种简单的方法将其转换为以下格式的哈希数组:

所需格式

 [{value1 : score1}, {value2 : score2},..., {valueN : scoreN}]
我不确定这个问题以前是否有人回答过。我找不到任何东西。

丑陋(不再粗鲁)它完成了任务

var output = [1,2,3,4,5,6,7,8,9,10].reduce((result, value, index, array) => {
    if (index % 2) {
        result.push({[array[index - 1]]: value});
    }
    return result;
}, []);
console.log(output);

…或者可以这样写,甚至可以使用一个函数进行自我记录;没有黑客声称

function flatArrayToPairs (input) {
  var output = [];
  for (var i = 0; i < input.length; i += 2) {
    var item = {};
    item[input[i]] = input[i+1];
    output.push(item);
  }
  return output;
}
函数平面阵列对(输入){
var输出=[];
对于(变量i=0;i

(上面的代码没有使用ES6对象初始值设定项,因为我缺乏更新的知识;这样做会使它缩短两行。)

这样的代码应该很容易阅读,同时提供您想要的内容

var arr = ['value1', 'score1', 'value2', 'score2']
  , result = [];

arr.forEach(function(item, index, arr){
  if (index%2 === 0){
    result.push({[item]: arr[index+1]})
  }else{
   return;
  }
});
//will produce:
[
  {
    "value1": "score1"
  },
  {
    "value2": "score2"
  }
]


你试了什么?没有什么?去试试看!当这样的尝试导致真正的问题时,问一个问题(这有助于形成更直接的问题)。“原生JavaScript”的方式是使用循环;每个循环可以双倍递增,也可以使用模数/切换,等等。有更聪明的方法使用外部库,如lodash。这一个甚至不需要外部库-您可以使用本机高阶函数轻松实现。map filter和reduce都是高阶函数,都可以在ES5中的阵列原型上使用。所需的格式不是有效的javascript语法。。。你的意思是
[{value1:score1},{…]
etc@user2864740考虑到es5在这种情况下不是必需的,这里有一个非常容易理解的一行代码:[value1,score1,value2,score2,…,valueN,scoreN].reduce((arrayToReturn,val,index)=>index%2==0?[…arrayToReturn,{[val]:test[index+1]}]:arraryTourn,[];因此,是的,您可以很容易地在语言中实现这一点。必须使用旧版本的IE-此代码现在在Javascript中是标准的,在Chrome中也可以使用/Firefox@user2864740ES6是该语言的官方标准。Node.js构建在V8引擎上。请阅读对象初始值设定项和动态键。@user2864740我开始我想你是一个巨魔。我没有说Node.js是一种语言——它是建立在即将成为ES6标准的V8引擎上的。ES6在去年6月已经定稿并成为标准,你是对的,它并不总是支持ES6——但是事情在发展@JaromandaX我学到了一些新的东西并删除了不再相关的评论。谢谢。@user2864740-我尊重你——当你至少学到一件事的时候,这总是一个好日子
var result = arr.map((item, index, arr) => ({[item]: arr[index + 1]}))
  .filter((item, index, ) => (index % 2 === 0))