依次从键/值对对象中打印出值

时间:2018-10-15 19:58:40

标签: javascript

我有一个键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);

2 个答案:

答案 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);