gpt4 book ai didi

javascript - 将数组分配为映射中的对象值

转载 作者:行者123 更新时间:2023-11-28 14:18:02 24 4
gpt4 key购买 nike

我必须解决下面这个问题。输出应该是一个对象映射,其中键作为排序值,所有其他变体作为分配给排序键的数组。我能够将值生成为字符串,但不能生成包含所有值的数组。有什么指点吗?

var list = ['ab', 'cd', 'acb', 'dc', 'ba', 'abc', 'cba', 'bca'];

var oMap = {};
var pairs = [];

for(var i=0; i <list.length; i++){
var temp = sortstr(list[i]);
oMap[temp] = {};
if(temp in oMap){
if(temp === sortstr(list[i])){
oMap[temp] = temp + "," + list[i]; --> should store in array
}
}
else {
oMap[temp] = {};
oMap[temp] = list[i];
}
}

console.log(oMap);

function sortstr(text) {
return text.split('').sort().join('');
};

预期输出:

{ab: [ab,ba], cd: [cd,dc], abc: [abc,bca,acb,cba] }

实际输出:

{ab: "ab,ba", cd: "cd,dc", abc: "abc,bca"}

最佳答案

下面的代码中有两行是我添加的。

oMap[temp] = oMap[temp] || [];

它将检查 oMap 上是否已存在 temp 属性,然后保持其值相同,否则将其设置为空数组。

oMap[temp].push(list[i]);

它将把新值添加到位于 oMaptemp 的数组末尾

var list = ['ab', 'cd', 'acb', 'dc', 'ba', 'abc', 'cba', 'bca'];

var oMap = {};
var pairs = [];

for(var i=0; i <list.length; i++){
var temp = sortstr(list[i]);
oMap[temp] = oMap[temp] || [];
oMap[temp].push(list[i]);
}

console.log(oMap);

function sortstr(text) {
return text.split('').sort().join('');
};

您正在从数组构建单个值,因此如果您想要更高阶的函数,可以使用reduce()

var list = ['ab', 'cd', 'acb', 'dc', 'ba', 'abc', 'cba', 'bca'];


const res = list.reduce((ac,a) => {
let k = sortstr(a);
ac[k] = (ac[k] || []).concat(a);
return ac;
},{})

console.log(res)


function sortstr(text) {
return text.split('').sort().join('');
};

关于javascript - 将数组分配为映射中的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611355/

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