gpt4 book ai didi

javascript - 数组到对象 es6 javascript

转载 作者:行者123 更新时间:2023-12-02 06:30:18 25 4
gpt4 key购买 nike

我正在尝试查看在 es6 中是否有更小的方法可以将数组转换为对象。 (我不用担心跨浏览器)

我目前有:

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

但我想知道是否可以删除函数的第一行 let [videos....] 部分。并以某种方式 inline 进行转换。

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

我怀疑这是不可能的,上面已经是我能做到的最简单的了。但是,如果我可以不创建 videosvideo_countpage tmp 变量,我会更开心。

最佳答案

你可以直接在函数参数中解构

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

myFunc(values);

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

// 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


您似乎一心想以某种方式缩短代码,所以就这样吧。在这种情况下,“让它变短”意味着先让它变长。

// Goal:
obuild(keys,values) //=> ourObject

通用过程 zipassignobuild 应该能够满足我们的需要。这大大优于@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 }

关于javascript - 数组到对象 es6 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com