我有一个键1、2和3的映射,它们的值分别为3、2和1。
我如何遍历它们以获取输出['one','two','three','one','two','one']?
这是我到目前为止尝试过的,只循环一次
const map = {
'one': 3,
'two': 2,
'three': 1
}
// expected output
// ['one', 'two', 'three', 'one', 'two', 'one'];
let arr = [];
// while all values > 0
for (let key of Object.keys(map)) {
if (map[key] > 0) {
arr.push(key);
map[key]--;
}
}
console.log(arr);
答案 0 :(得分:2)
只需在其周围添加另一个循环:
let keyLeft;
do {
keyLeft = false;
for (let key of Object.keys(map)) {
if (map[key] > 0) {
arr.push(key);
map[key]--;
keyLeft = true;
}
}
} while(keyLeft)
答案 1 :(得分:0)
我将设置一个标志,该标志指示我们是否必须继续循环,如下所示:
const map = {
'one': 3,
'two': 2,
'three': 1
}
// expected output
// ['one', 'two', 'three', 'one', 'two', 'one'];
let arr = [];
// while all values > 0
let keepLooping = true;
while (keepLooping)
{
keepLooping = false;
for (let key of Object.keys(map))
{
if (map[key] > 0)
{
arr.push(key);
map[key]--;
keepLooping = true;
}
}
}
console.log(arr);