- Допущение: product_id является уникальным
Для массива нет никакого другого пути, кроме как петли через все это. Вы должны рассмотреть возможность изменения вашей базы данных в JSON, тогда это станет намного проще.
В вашем примере
var products = [
0 [product_id, title, description]
1 [1234, apple, this is just apple]
2 [2345, pineapple, this is not just apple]
]
становится
var products = {
product_id: [product_id, title, description],
1234: [1234, apple, this is just apple],
2345: [2345, pineapple, this is not just apple]
}
Теперь вы можете просто сказать
var select_1234 = products[1234];
, чтобы получить продукт 1234.
Если вы должны придерживаться массив a d вам нужно найти продукты несколько раз, подумайте о том, чтобы сделать преобразование в начале вашего приложения, чтобы изменить его на json. Таким образом вы индексировали ваши данные и теперь вы можете снова позвонить
products[1234]
EDIT
В качестве альтернативы, вы можете создать данные в формате JSON, чтобы связать в массив, например
var productsIndex = {
product_id: 0,
1234: 1,
2345: 2
}
Это ссылки на позицию массива, теперь вы можете позвонить по телефону
var find = productsIndex[1234];
var select_1234 = products[find]; //This is the original array.
В качестве дополнительного рассмотрите возможность использования преобразований async для преобразования данных, чтобы он не зависал ни один пользовательский интерфейс. Это может быть сделано с помощью рекурсивного SetTimeout с 0 секунд
var products = {
product_id: [product_id, title, description],
1234: [1234, apple, this is just apple],
2345: [2345, pineapple, this is not just apple]
}
var productsIndex = {}
function recursiveTransform(val){
setTimeout(function(){
productsIndex[products[val].[0]] = val; //products[val].[0] is the product id of each array element
if (val != products.length -1) recursiveTransform(val+1);
}, 0)
}
recursiveTransform(0);
Делая это, вы не замерзнете ваш пользовательский интерфейс или любую другую операцию, которая может понадобиться для запуска в процессе
- I не проверяли код, но он должен дать вам идею
Нет, на самом деле, если вы хотите, чтобы внешний массив был основан на его содержимом, вам нужно повторить итерацию. – adeneo
Почему бы не собрать коллекцию? '[{id: 1, title: 'Foo', description: 'baz'}, ...]' – elclanrs
Одиночное сканирование массива - O (n). –