Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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
将2个元素数组的JavaScript数组转换为对象键值对_Javascript_Arrays_Object - Fatal编程技术网

将2个元素数组的JavaScript数组转换为对象键值对

将2个元素数组的JavaScript数组转换为对象键值对,javascript,arrays,object,Javascript,Arrays,Object,从以下内容中获取信息的最快算法是什么: var array = [ [1,'a'], [2,'b'], [3,'c'] ]; Object { 1: "a", 2: "b", 3: "c" } 对这样的事情: var array = [ [1,'a'], [2,'b'], [3,'c'] ]; Object { 1: "a", 2: "b", 3: "c" } 到目前为止,我的想法是: function objectify(array) { var object = {};

从以下内容中获取信息的最快算法是什么:

var array = [ [1,'a'], [2,'b'], [3,'c'] ];
Object { 1: "a", 2: "b", 3: "c" }
对这样的事情:

var array = [ [1,'a'], [2,'b'], [3,'c'] ];
Object { 1: "a", 2: "b", 3: "c" }
到目前为止,我的想法是:

function objectify(array) {
    var object = {};
    array.forEach(function(element) {
        object[element[0]] = element[1];
    });
    return object;
}
这很好,但似乎有点笨拙。有更好的办法吗?你想做点什么吗?那会更快吗?

你确实可以使用:

其中
p
是上一次迭代的结果,最初
{}
,而
c
是数组的当前元素

它不太可能比array.forEach快,但它更干净。我认为没有比这更简单的实现了


注意:库中已经存在一个函数来完成这项工作:
\uu.object(array)

您可以像这样将整个内容包装在其中

function objectify(array) {
    return array.reduce(function(result, currentArray) {
        result[currentArray[0]] = currentArray[1];
        return result;
    }, {});
}

console.log(objectify([ [1, 'a'], [2, 'b'], [3, 'c'] ]));
# { '1': 'a', '2': 'b', '3': 'c' }

我们只是在
result
对象中累积键值对,最后
reduce
的结果将是
result
对象,我们将其作为实际结果返回。

Lodash有一个
\uFromPairs
方法可以准确地做到这一点

从文档中:

_.fromPairs([[a',1],[b',2]]);
//=>{a:1,'b:2}

使用现代语法的简洁版本:

let objectify = a => a.reduce( (o,[k,v]) => (o[k]=v,o), {} );
我将此技术用作简洁查询字符串解析器的一部分:

// Converts "?foo=bar&j=1&go" into { foo:'bar', j:'1', go:true }
function parseQueryString(qs) {
    var q = decodeURIComponent;
    return qs.replace(/^\?/,'').split('&').map(s => s.split('='))
             .reduce((o,[k,v]) => (o[q(k)] = v?q(v):true, o), {});
}
使用,您可以从
数组
转换为
对象

var数组=[
[1,‘a’],
[2,‘b’],
[3,'c']
];
var object=object.fromEntries(数组);

console.log(对象)这非常适合我的用例。我认为自己在ESXXXX相当精通,但我不太清楚拉姆达是如何运作的。特别是
(o[k]=v,o)
部分。有什么见解吗?另外,感谢您分享此宝石。:-)@KyleFarris它使用逗号运算符对映射执行赋值,然后返回
o
本身。这是“正确”的答案,比
reduce
方法好得多。如果您需要针对非常旧的浏览器(如IE),请仅使用
reduce
,这是一种非常优雅的方式。这个代码片段完成了这项工作,没有任何进一步的复杂性。