js中如何将
[
['指南', '设计原则', '一致1'],
['指南', '设计原则', '一致2'],
['指南', '设计原则', '一致3'],
['指南', '导航', '导航1'],
['指南', '导航', '导航2'],
]
快速转换为:
[
"指南>设计原则>一致1|一致2|一致3",
"指南>导航>导航1|导航2",
]
js中如何将
[
['指南', '设计原则', '一致1'],
['指南', '设计原则', '一致2'],
['指南', '设计原则', '一致3'],
['指南', '导航', '导航1'],
['指南', '导航', '导航2'],
]
快速转换为:
[
"指南>设计原则>一致1|一致2|一致3",
"指南>导航>导航1|导航2",
]
// 递归合并成对象至最后一级
function merge(arr, result = {}) {
return arr.reduce((ret, [key, ...args]) => {
if (args.length > 1) {
merge([args], (ret[key] = ret[key] || {}));
} else {
ret[key] = (ret[key] || []).concat(args[0] || "");
}
return ret;
}, result);
}
// 将对象按照所需格式拼装
function dump(arr) {
const result = merge(arr, {});
const print = (obj, path = []) => {
for (const [key, value] of Object.entries(obj)) {
const curPath = path.concat(key);
if (Array.isArray(value)) {
console.log(curPath.concat("").join(">") + value.join("|"));
} else {
print(value, curPath);
}
}
};
print(result);
}
// 打印结果
console.log(
dump([
["指南", "设计原则", "一致1"],
["指南", "设计原则", "一致2"],
["指南", "设计原则", "一致3"],
["指南", "导航", "导航1"],
["指南", "导航", "导航2"],
])
);
let arr = [
["指南", "设计原则", "一致1"],
["指南", "设计原则", "一致2"],
["指南", "设计原则", "一致3"],
["指南", "导航", "导航1"],
["指南", "导航", "导航2"],
];
let newArr = arr.reduce((a, b) => {
let index = a.findIndex((item) => {
let itemArr = item.split(">");
if (itemArr[0] === b[0] && itemArr[1] === b[1]) {
return true;
}
return false;
});
if (index < 0) {
a.push(b.join(">"));
} else {
a[index] += "|" + b[2];
}
return a;
}, []);
console.log(newArr);
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
抛砖引玉 target 为目标对象