Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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 - Fatal编程技术网

JavaScript-来自两个数组的对象(父元素和子元素)

JavaScript-来自两个数组的对象(父元素和子元素),javascript,Javascript,我有两个阵列: 我需要将对象链接作为具有子链接数组的键: var menu = { home: ["some subLink", "some subLink 2"], contact: ["some subLink 3"] }; 此刻我有这个 links.map(link => ({ [link.code]: subLinks.map(subLink => (subLink.parent.code === link.code && subLink.c

我有两个阵列:

我需要将对象链接作为具有子链接数组的键:

var menu = {
  home: ["some subLink", "some subLink 2"],
  contact: ["some subLink 3"]
};
此刻我有这个

links.map(link => ({
    [link.code]: subLinks.map(subLink => (subLink.parent.code === link.code && subLink.code))
}))
变量链接=[ {代码:'home'}, {代码:'联系人'}, ]; 变量子链接=[ {code:'some subLink',父项:{code:'home'}, {code:'some subLink 2',父项:{code:'home'}, {code:'some subLink 3',父项:{code:'contact'} ]; var菜单={}; forvar i=0;我 变量链接=[ {代码:'home'}, {代码:'联系人'}, ]; 变量子链接=[ {code:'some subLink',父项:{code:'home'}, {code:'some subLink 2',父项:{code:'home'}, {code:'some subLink 3',父项:{code:'contact'} ]; var菜单={};
forvar i=0;我绝对喜欢使用函数JS进行数组转换

const menu = {};

links.map(link => menu[link.code] = subLinks
    .filter(sl => sl.parent.code === link.code)
    .map(sl => sl.code)
);
使用reduce

const menu = links.reduce((memo, menu) => {
    memo[menu.code] = subLinks
        .filter(sl => sl.parent.code === menu.code)
        .map(sl => sl.code);
    return memo;
},{});

这两种方法都很好,但如果不必创建变量在循环中进行变异,可能会更好一些。

我绝对喜欢使用函数JS进行数组转换

const menu = {};

links.map(link => menu[link.code] = subLinks
    .filter(sl => sl.parent.code === link.code)
    .map(sl => sl.code)
);
使用reduce

const menu = links.reduce((memo, menu) => {
    memo[menu.code] = subLinks
        .filter(sl => sl.parent.code === menu.code)
        .map(sl => sl.code);
    return memo;
},{});

这两种方法都很好,但reduce不必创建变量来在循环中进行变异可能会稍微好一点。

您可以通过两个过程来完成这一点:首先,您迭代链接以使用父链接创建基本对象。然后,迭代子链接,将它们添加到第一次添加的相应链接中

这样做的好处是它只显式地迭代每个原始数组一次

变量链接=[ {代码:'home'}, {代码:'联系人'}, ]; 变量子链接=[ {code:'some subLink',父项:{code:'home'}, {code:'some subLink 2',父项:{code:'home'}, {code:'some subLink 3',父项:{code:'contact'} ]; //通过1 var result={}; 对于var i=0;i.长度;i++{ 结果[链接[i]。代码]=[]; } //通过2 对于var i=0;i.长度;i++{ var subLink=子链接[i]; 结果[subLink.parent.code].pushsubLink.code; }
console.logresult 您可以在两个过程中完成此操作:首先,迭代链接以使用父链接创建基本对象。然后,迭代子链接,将它们添加到第一次添加的相应链接中

这样做的好处是它只显式地迭代每个原始数组一次

变量链接=[ {代码:'home'}, {代码:'联系人'}, ]; 变量子链接=[ {code:'some subLink',父项:{code:'home'}, {code:'some subLink 2',父项:{code:'home'}, {code:'some subLink 3',父项:{code:'contact'} ]; //通过1 var result={}; 对于var i=0;i.长度;i++{ 结果[链接[i]。代码]=[]; } //通过2 对于var i=0;i.长度;i++{ var subLink=子链接[i]; 结果[subLink.parent.code].pushsubLink.code; }
console.logresult 双循环可以:

变量链接=[ { 代码:“家” }, { 代码:“联系人” }, ]; 变量子链接=[ { 代码:“某些子链接”, 家长:{ 代码:“家” } }, { 代码:“某些子链接2”, 家长:{ 代码:“家” } }, { 代码:“某些子链接3”, 家长:{ 代码:“联系人” } } ]; var菜单={};
forvar i=0;i双循环可以:

变量链接=[ { 代码:“家” }, { 代码:“联系人” }, ]; 变量子链接=[ { 代码:“某些子链接”, 家长:{ 代码:“家” } }, { 代码:“某些子链接2”, 家长:{ 代码:“家” } }, { 代码:“某些子链接3”, 家长:{ 代码:“联系人” } } ]; var菜单={}; forvar i=0;i另一种解决方案:

变量链接=[{ 代码:“家” }, { 代码:“联系人” }]; 变量子链接=[{ 代码:“某些子链接”, 家长:{ 代码:“家” } }, { 代码:“某些子链接2”, 家长:{ 代码:“家” } }, { 代码:“某些子链接3”, 家长:{ 代码:“联系人” } }]; const result=links.reduceo,x=>{ o[x.code]=subLinks.filterf=>f.parent.code==x.code.mapm=>m.code; 返回o; }, {}; console.logresult 另一个解决方案:

变量链接=[{ 代码:“家” }, { 代码:“联系人” }]; 变量子链接=[{ 代码:“某些子链接”, 家长:{ 代码:“家” } }, { 代码:“某些子链接2”, 家长:{ 代码:“家” } }, { 代码:“某些子链接3”, 家长:{ 代码:“联系人” } }]; const result=links.reduceo,x=>{ o[x.code]=subLinks.filterf=>f.parent.code==x.code.mapm=>m.code; 返回o; }, {};
console.logresult;map将返回一个数组。考虑使用Relo.Mag将返回一个数组。注意使用Read。注意,这完全迭代了精确的链接长度。没有O标记的任何规范;这不是批评,只是一个友好的音符;我还是喜欢你的代码!:不要被视为批评我发现最具可读性的代码通常是处理任何O类东西的最佳方式。有时数组很小,我们的迭代次数比实际需要的要多,这无关紧要。请注意,这会完全迭代子链接,精确到links.length次;这不是故意的
作为批评,只是一个友好的音符;我还是喜欢你的代码!:不要被视为批评我发现最具可读性的代码通常是处理任何O类东西的最佳方式。有时数组很小,我们进行的迭代次数比实际需要的要多并不重要。请注意,这完全迭代子链接,精确到links.length次。请注意,这完全迭代子链接,精确到links.length次。谢谢沃纳,这样更好谢谢沃纳,这样更好