javascript - 将数组分配为地图中的对象值
问题描述
我必须在下面解决这个问题。输出应该是一个对象映射,其中键作为排序值,所有其他变体作为分配给排序键的数组。我能够将值生成为字符串,但不能生成为包含所有值的数组。任何指针?
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"}
解决方案
您需要一个数组作为值的目标,并省略一些检查和不必要的分配。
function sortstr(text) {
return text.split('').sort().join('');
}
var list = ['ab', 'cd', 'acb', 'dc', 'ba', 'abc', 'cba', 'bca'],
oMap = {},
temp, i;
for (i = 0; i < list.length; i++) {
temp = sortstr(list[i]);
if (temp in oMap) {
oMap[temp].push(list[i]);
} else {
oMap[temp] = [list[i]];
}
}
console.log(oMap);
.as-console-wrapper { max-height: 100% !important; top: 0; }
通过使用虚假内容的默认值的更短的方法。
function sortstr(text) {
return text.split('').sort().join('');
}
var list = ['ab', 'cd', 'acb', 'dc', 'ba', 'abc', 'cba', 'bca'],
oMap = {},
temp, i;
for (i = 0; i < list.length; i++) {
temp = sortstr(list[i]);
oMap[temp] = oMap[temp] || []; // check if truthy or take array
oMap[temp].push(list[i]);
}
console.log(oMap);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- google-cloud-firestore - 将图像上传到存储并更新配置文件
- ruby - 如何使用 Ruby 调试动态定义的方法?(在 repl 会话中创建的方法)
- c++ - 关于向量的调整大小和保留的奇怪记忆行为
- java - 使用 java 获取 Qubole 数据行明智
- html - Vuetify Offset 不创建任何偏移量
- regex - 检查第 1 列的值是否存在于第 2 列的任何位置,将结果写入第 3 列(CSV 文档)
- c - STM32 应用程序有时不运行,仍然在 DFU
- excel - Excel-VBA 图表系列名称未显示在 X 轴上
- openstack-nova - 如何获取所有实例列表属于 Openstact 中的所有项目?在 CLI 模式下
- bash - 使用 CLI 打开新的终端选项卡/窗口