如何解决从对象键构建字符串
我有一个带有键和值的对象。每个值都是一个数组,描述键在字符串中的位置。
const input = {
' ': [5],d: [10],e: [1],H: [0],l: [2,3,9],o: [4,7],r: [8],w: [6],};
const buildString = (m) => {
}
我注意返回字符串 Hello world 。我的解决方案如下所示:
const buildString = (m) => {
let res = [];
for(let key in m) {
m[key].map(el => {
res[el] = key;
})
}
return res.join('');
}
但我认为它可以使用reduce方法解决。有人可以帮我实施吗? 提前致谢。
解决方法
给你
const input = {
' ': [5],d: [10],e: [1],H: [0],l: [2,3,9],o: [4,7],r: [8],w: [6],};
const words = Object.entries(input)
.reduce( (acc,[character,positions]) => {
// | ^ Object.entries gives you an array of [key,value] arrays
// ^ acc[umulator] is the array (second parameter of reduce)
positions.forEach(v => acc[v] = character);
// ^ put [character] @ the given [positions] within acc
return acc;
},[])
.join("");
// ^ join the result to make it a a string
console.log(words);
您需要采用双重嵌套循环,一个用于迭代条目,另一个用于获取索引。
为了收集字符,您需要一个数组并返回连接的数组。
const
input = { ' ': [5],w: [6] },buildString = (m) => {
const letters = [];
for (let [character,indices] of Object.entries(m)) {
for (const index of indices) {
letters[index] = character;
}
}
return letters.join('');
};
console.log(buildString(input));
也许可以做得更好,但这是我的尝试。
它使用 Object.entries
将 input
“转换”为键/值数组对的数组。
然后它遍历每个条目及其位置,并将它们放在累加器数组中的正确位置。
最后使用数组方法join
将累加器数组转换为字符串。
const input = {
' ': [5],};
const buildString = (m) => {
return Object.entries(m).reduce((acc,[key,positions],ind) => {
positions.forEach(val => acc[val] = key);
return acc;
},[]).join('');
}
console.log(buildString(input))
Reduce 并不是每次都让事情变得更简单,但无论如何:
const input = {
' ': [5],};
const result = Object.entries(input).reduce((word,entry) => {
const [letter,indices] = entry;
for (const index of indices) {
word[index] = letter;
}
return word;
},[]).join('');
console.log(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。