数组到对象es6 javascript

WOR*_*MSS 2 javascript destructuring ecmascript-6

我试图看看是否有一种较小的方法将数组转换为es6中的对象.(我不必担心跨浏览器)

我目前有:

function (values) // values being an array.
{   
    let [videos, video_count, page] = values;
    let data = { videos, video_count, page };
    someFunctions(data);
    moreFunctions(data);
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否可以删除该功能的第一行,let [videos....]部分.并以某种方式内联进行转换.

我通过mozilla阅读:解构分配,但我在那里看不到它.(但我可能已经理解错了)而且我真的不够聪明,无法理解ECMA:ES6 Spec.

我怀疑这是不可能的,上面已经是最简单的我可以做到的.但如果我能逃脱不创造videos,video_countpageTMP变量我会更开心.

Tha*_*you 6

您可以在函数参数中进行结构化

function myFunc([ videos, video_count, page ])
{   
    let data = { videos, video_count, page };
    someFunctions(data);
    moreFunctions(data);
}

myFunc(values);
Run Code Online (Sandbox Code Playgroud)

我使用这种技术做了很多数据抽象

// basic abstraction
const ratio = (n, d) => ({n, d});
const numer = ({n}) => n;
const denom = ({d}) => d;

// compound abstraction using selectors
const ratioAdd = (x,y) => ratio(
  numer(x) * denom(y) + numer(y) * denom(x),
  denom(x) * denom(y)
);

// or skip selectors if you're feeling lazy
const printRatio = ({n,d}) => `${n}/${d}`;

console.log(printRatio(ratioAdd(ratio(1,3), ratio(1,4)))); //= 7/12
Run Code Online (Sandbox Code Playgroud)


你似乎在某种程度上让代码更短,所以你走了.在这种情况下,"缩短"意味着首先使它更长.

// Goal:
obuild(keys,values) //=> ourObject
Run Code Online (Sandbox Code Playgroud)

通用程序zip,assign以及obuild应该给我们所需要的.这远远优于@ CodingIntigue的答案,因为它不是一个试图完成所有任务的大功能.将它们分开意味着降低复杂性,提高可读性和可重用性.

// zip :: [a] -> [b] -> [[a,b]]
const zip = ([x,...xs], [y,...ys]) => {
  if (x === undefined || y === undefined)
    return [];
  else
    return [[x,y], ...zip(xs,ys)];
}

// assign :: (Object{k:v}, [k,v]) -> Object{k:v}
const assign = (o, [k,v]) => Object.assign(o, {[k]: v});

// obuild :: ([k], [v]) -> Object{k:v}
const obuild = (keys, values) => zip(keys, values).reduce(assign, {});

let keys = ['a', 'b', 'c'];
let values = [1, 2, 3];

console.log(obuild(keys,values));
// { 'a': 1, 'b': 2, 'c': 3 }
Run Code Online (Sandbox Code Playgroud)