Javascript присоединяется неправильно, когда пользовательские индексы [дубликаты]

1

У меня есть этот массив:

[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

Как присоединиться к настраиваемому индексированному массиву?

  • 0
    Фильтровать массив перед присоединением ..?
  • 1
    Вы получите этот результат, потому что именно так выглядит массив. Массив содержит 83 элемента, большинство из которых не undefined , но длина массива равна 83. Поэтому вам, вероятно, следует подумать об использовании объекта или набора вместо массива.
Показать ещё 1 комментарий
Теги:

3 ответа

2
Лучший ответ

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('|')
1

Вы можете фильтровать разреженный массив с обратным вызовом, который возвращает 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);
0

Использовать 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню