Почему пустой массив при объединении значений?
var arr = [];
data = [
{id: 1, base: "Yes", name: "Test 1"},
{id: 2, base: "No", name: "Test 2"},
{id: 2, base: "Yes", name: "Test 3"},
{id: 4, base: "No", name: "Test 4"},
];
$.each(data, function(i, item){
if(arr[item.base]) arr[item.base].push(item.name);
else arr[item.base] = [];
});
console.log(arr);
console.log(arr.length);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Нужен примерно такой результат
[
"Yes" [
"Test 1",
"Test 3"
],
"No" [
"Test 2",
"Test 4"
]
]
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Свойство массива length меняется только при добавлении/удалении ключей, которые могут быть допустимыми индексами, а именно целочисленные значения от 0 до 232
В данном случае в массив добавляются строковые ключи, которые не влияют на свойство length.
В данном случае arr нужно заменить на объект, тогда и вывод будет ожидаемым:
var arr = {};
data = [{
id: 1,
base: "Yes",
name: "Test 1"
},
{
id: 2,
base: "No",
name: "Test 2"
},
{
id: 2,
base: "Yes",
name: "Test 3"
},
{
id: 4,
base: "No",
name: "Test 4"
},
];
$.each(data, function(i, item) {
if (arr[item.base]) arr[item.base].push(item.name);
else arr[item.base] = [item.name];
});
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>