В общем, дело тёмное. У меня есть массив вида ключ: значение:
var arr1 = [];
$('select').each(function() {
if ($(this).val() != 0) {
arr1[$(this).attr('name')] = $(this).find('option:selected').text();
}
});
/* получаем массив: var arr1 = [,,,,,'Россия, Москва',,,,,,,,,,,,,,,,'Россия, Брянск']; */
И формирование нового массива объектов, куда нужно занести ключ, если значение найдено в 1-ом массиве:
<select id="example_select">
<option value="0">Россия, Москва</option>
<option value="1">Россия, Ростов</option>
<option value="2">Россия, Сочи</option>
<option value="3">Россия, Брянск</option>
</select>
var arr2 = [];
$('#example_select option').each(function() {
arr2[arr2.length] = {
'address': $(this).text(), // Сюда попадет строка с адресом: Россия, Москва
'id': /* а вот здесь должен быть индекс найденного адреса, если не удалось найти, тогда 0 */
}
});
Как мне получить такой вот результат?
arr2 = [
{address: "Россия, Москва", id: "5"},
{address: "Россия, Ростов", id: "0"},
{address: "Россия, Сочи", id: "0"},
{address: "Россия, Брянск", id: "21"}
]
Можно создать новый массив объектов на основе текущего при помощи #array.map()
, а потом почистить от undefined
.
const array = [,,,,"first",,,,,,,,,,,,,"second",,,,,,,,"third"]
const mappedArray = array.map((item, index) => {
return {
address: item,
id: index
}
}).filter(item => {
if (typeof item !== undefined) return item
})
console.log(mappedArray)
Во-первых у вас это просто массив, а не "массив вида (ключ, значение)". Цифры перед значением, являются индексами, фактически массив их не содержит!
for
function arrayToObjArray(array) {
let result = [];
for (let i = 0; i < array.length; ++i) {
let obj = {};
obj.id = i;
obj.address = array[i];
result.push(obj);
}
return result;
}
let someArray = ['Moscow', 'Samara', 'Perm'];
console.log(arrayToObjArray(someArray));
Ни один из предложенных вариантов не является решением моей проблемы, сегодня еще погуглил, посидел, почесал репу, и решил задачу:
var arr1 = arr1 = [,,,,,'Россия, Москва',,,,,,,,,,,,,,,,'Россия, Брянск'],
arr2 = [];
$('#example_select option').each(function() {
if ($(this).val() != 0) {
var get_index = arr1.findIndex(item => item === $(this).text());
arr2[arr2.length] = {
'addres': $(this).text(),
'id': (get_index > 0) ? get_index : 0
}
}
});
console.log(arr2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="example_select">
<option value="0">Адрес не выбран</option>
<option value="1">Россия, Москва</option>
<option value="2">Россия, Ростов</option>
<option value="3">Россия, Сочи</option>
<option value="4">Россия, Брянск</option>
</select>
p.s. В заголовке вопроса я просил помочь найти индекс по заданному значению, никто не подсказал мне про findIndex
, вместо этого, люди начали задавать глупые вопросы и предлагать совершенно нелепые варианты будто не хотели вникать и написали на оте***сь, вместо адекватной помощи комьюнити я получил дизлайки вопроса (на то есть причины естественно, надо было сразу поработать над описанием) и не получил верного ответа, даже логически никто не понял какой результат я хотел получить, хотя всё вроде разжевал. Очень не порадовал результат в общем...
Если имеется в виду работа с DOM с помощью jQuery, то в колбэк each передается индекс:
$('#example_select option').each(function(index) {
...
То есть если есть какойто DOM
<select id="example_select">
<option value="5">Россия, Москва</option>
<option value="21">Россия, Брянск</option>
</select>
То желаемый результат можно получить так:
var arr2 = [];
$('#example_select option').each(function(index) {
arr2.push({
'address': $(this).text(),
'id': $(this).val()
})
});
На выходе получите:
arr2 = [
{address: "Россия, Москва", id: "5"},
{address: "Россия, Брянск", id: "21"}
]
Оставшиеся элементы, не встречающиеся в select, добавите отдельно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
День добрый! Подскажите в чём может быть проблемаПоменял системный блок и начались проблемы
Есть массив с данными, там есть кнопки, мне нужно чтобы при нажатие на конкретную кнопку менялся цвет только этой кнопки
Здравствуйте у меня такой вопросесть одна таблица в котором есть число до 10 нужно писать query который нам дает все четные и нечетные числи