Fre*_*est 13 javascript arrays object
从这样的东西获得最快的算法是什么:
var array = [ [1,'a'], [2,'b'], [3,'c'] ];
Run Code Online (Sandbox Code Playgroud)
这样的事情:
Object { 1: "a", 2: "b", 3: "c" }
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我提出的:
function objectify(array) {
var object = {};
array.forEach(function(element) {
object[element[0]] = element[1];
});
return object;
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但似乎有点笨拙.有没有更好的办法?像reduce()这样的工作会更快吗?
Aln*_*tak 20
你确实可以使用Array.prototype.reduce:
function objectify(array) {
return array.reduce(function(p, c) {
p[c[0]] = c[1];
return p;
}, {});
}
Run Code Online (Sandbox Code Playgroud)
p最初{},前一次迭代的结果在哪里,并且c是数组的当前元素.
它不可能比任何更快array.forEach,但它是恕我直言更清洁.我不相信有任何比这更简单的实现.
注意:在Underscore库中已经存在一个完全正确的函数:_.object(array)
Pen*_*Liu 19
使用Object.fromEntries,您可以从 转换Array为Object:
var array = [
[1, 'a'],
[2, 'b'],
[3, 'c']
];
var object = Object.fromEntries(array);
console.log(object);Run Code Online (Sandbox Code Playgroud)
使用现代语法的Terse版本:
let objectify = a => a.reduce( (o,[k,v]) => (o[k]=v,o), {} );
Run Code Online (Sandbox Code Playgroud)
我使用这种技术作为简洁的查询字符串解析器的一部分:
// 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), {});
}
Run Code Online (Sandbox Code Playgroud)
Lodash 有一个_.fromPairs方法可以做到这一点。
从文档:
_.fromPairs([['a', 1], ['b', 2]]);
// => { 'a': 1, 'b': 2 }
| 归档时间: |
|
| 查看次数: |
9677 次 |
| 最近记录: |