Массив JS, используемый во второй раз, имеет длину, равную '0', но содержит объекты

Это может быть реализовано с помощью модуля pause :

---
- hosts: server01
  gather_facts: True
  tasks:
    - pause:
        prompt: please enter the name for the target [{{ ansible_hostname }}]
      register: prompt

    - debug:
        msg: "{{ prompt.user_input if prompt.user_input else ansible_hostname }}"

0
задан georg 30 March 2019 в 22:03
поделиться

2 ответа

Вы хотите использовать здесь объекты, а не массивы. Потому что массивы - это списки с индексом.

Рабочий пример:

var arrNumber = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 4, 6, 8, 0 ,4, 6, 8, 4];
var arrString = ["a", "e", "i", "o", "u", "a", "i", "u", "i"];

var arrDuplicateValues = {};
// Fist time: Only number
arrNumber.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // OK


// Second time: With string
arrDuplicateValues = {};
arrString.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // NOK
console.log(arrDuplicateValues["i"]);

0
ответ дан Webber 30 March 2019 в 22:03
поделиться

arrDuplicateValues является объектом во второй раз, потому что массив не имеет строкового индекса. Таким образом, хотя вы инициализировали его как Array (), в конечном итоге он стал картой (пара ключ-значение), поэтому, когда вы просто пытались напечатать всю карту, ничего не получилось. Если вы просто измените инициализацию на arrDuplicateValues = {}; во второй раз, она будет работать нормально.

var arrNumber = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 4, 6, 8, 0 ,4, 6, 8, 4];
var arrString = ["a", "e", "i", "o", "u", "a", "i", "u", "i"];

var arrDuplicateValues = new Array();
// Fist time: Only number
arrNumber.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // OK


// Second time: With string
arrDuplicateValues = {};
arrString.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // NOK
console.log(arrDuplicateValues["i"]);
0
ответ дан sapy 30 March 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: