У меня есть этот массив:
[10: "AAA", 30: "BBB", 50: "CCC", 60: "DDD", 80: "EEE", 81: "FFF", 82: "GGG", 83: "HHH"]
и после использования команды:
myarray.join('|')
он вернет несколько дублированных труб. function join
означает, что существует массив с индексами 0-10, 11-29 и т.д., например: [empty × 10, "AAA", empty × 19, "BBB", empty × 19, "CCC", empty × 9, "DDD", empty × 19, "EEE", "FFF", "GGG", "HHH"]
Результат:
| | | | | | | | | | AAA | | | | | | | | | | | | | | | | | | | | BBB | | | | | | | | | | | | | | | | | | | | CCC | | | | | | | | | | DDD | | | | | | | | | | | | | | | | | | | | EEE | FFF | GGG | HHH
но ожидаемый результат:
AAA | BBB | CCC | DDD | EEE | FFF | GGG | HHH
Как присоединиться к настраиваемому индексированному массиву?
filter
пустые или неопределенные записи, а затем присоединяться как обычно.
myarray = [];
myarray[10] = 'AAA'; myarray[30] = 'BBB'
result = myarray.filter(x => x != '' && x != undefined).join('|')
console.log(result)
Изменить: для этого конкретного случая filter
можно упростить с помощью:
result = myarray.filter(x => x).join('|')
Вы можете фильтровать разреженный массив с обратным вызовом, который возвращает true
и присоединяется к результату.
var array = [],
result;
array[10] = "AAA";
array[30] = "BBB";
array[50] = "CCC";
array[60] = "DDD";
array[80] = "EEE";
array[81] = "FFF";
array[82] = "GGG";
array[83] = "HHH";
result = array.filter(_ => true).join('|');
console.log(result);
Использовать Array.filter
let arr = [];
arr[10] = "AAA", arr[30] = "BBB", arr[50] = "CCC", arr[60] = "DDD", arr[80] = "EEE", arr[81] = "FFF", arr[82] = "GGG", arr[83] = "HHH";
let result = arr.filter(v => !!v).join('|');
console.log(result);
undefined
, но длина массива равна 83. Поэтому вам, вероятно, следует подумать об использовании объекта или набора вместо массива.