2016-11-27 3 views
1

Я алфавитный порядком списка стран, в массиве, как следующее:Получения индекса первого объекта в массиве, который имеет свойство «имя», начиная с выбранной буквой

[ 
    { 
    name: "United States", 
    country_code: "US", 
    dial_code: "+1" 
    }, 
    { .. etc } 
] 

Я прослушивание для пользователей ввода ключа и позволяю говорят, что они нажимают клавишу «a». Я хочу получить индекс первого объекта в массиве, где имя начинается с «a».

Теперь мой вопрос заключается не в том, как выполнить всю эту операцию, просто советы/идеи о том, как найти такой индекс в массиве, если я уже знаю, что пользователь нажал «a». Я смотрел на lodash, чтобы сделать это, но не смог понять это, поэтому не стесняйтесь использовать сторонние библиотеки, если они подходят для решения этой проблемы.

ответ

1

использование _.findIndex найти первый согласованный индекс элемента :

var firstIndex = _.findIndex(countries, function(country) { 
    return _.chain(country) 
     .get('name', '') 
     .lowerCase() 
     .startsWith('a') 
     .value(); 
}); 
1

Вы можете использовать объект с первой буквой и индексом для доступа к данному массиву и концу массива с теми же буквами, как

var abc = { 
    u: [0, 1] 
} 

Пример с буквой 'u':

var countries = [{ name: "United Kingdom", country_code: "UK", dial_code: "+44" }, { name: "United States", country_code: "US", dial_code: "+1" }, { name: "France", country_code: "FR", dial_code: "+33" }, { name: "Italy", country_code: "IT", dial_code: "+16" }], 
 
    abc = Object.create(null); 
 

 
countries.sort(function (a, b) { 
 
    return a.name.localeCompare(b.name); 
 
}); 
 

 
countries.forEach(function (a, i) { 
 
    var c = a.name[0].toLowerCase(); 
 
    if (!abc[c]) { 
 
     abc[c] = [i]; 
 
    } 
 
    abc[c][1] = i + 1; 
 
}); 
 

 
console.log(Array.prototype.slice.apply(countries, abc['u'])); 
 
console.log(abc);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

Вы могли бы реализовать функцию, которая будет фильтровать страны, которые начало имени с буквой указанного в качестве параметра:

var countries = [ 
 
    { 
 
    name: "United States", 
 
    country_code: "US", 
 
    dial_code: "+1" 
 
    }, 
 
    { name: "France", 
 
    country_code: "FR", 
 
    dial_code: "+33" 
 
    }, 
 
    { name: "Italy", 
 
    country_code: "IT", 
 
    dial_code: "+16" 
 
    } 
 
] 
 
var selectedCountries = (array, letter) => array.filter(x => x.name.indexOf(letter) === 0); 
 

 
console.log(selectedCountries(countries, "F"));

 Смежные вопросы

  • Нет связанных вопросов^_^