Например, у меня есть:
var Data = [
{ id_list: 1, name: 'Nick', token: '312312' },
{ id_list: 2, name: 'John', token: '123123' },
]
Затем я хочу отсортировать / перевернуть этот объект name
, например. И тогда я хочу получить что-то вроде этого:
var Data = [
{ id_list: 2, name: 'John', token: '123123' },
{ id_list: 1, name: 'Nick', token: '312312' },
]
А теперь я хочу узнать индекс объекта со свойством, name='John'
чтобы получить значение токена свойства.
Как мне решить проблему?
javascript
arrays
object
rsboarder
источник
источник
{Key:Value}
, я исправил это для вас.Data
объект. Это просто имя переменной с большой буквы, что противоречит соглашению. Если кого-то еще это беспокоит, я внесу изменения в вопрос и ответы, чтобы исправить это наименование.Ответы:
Как показывают другие ответы, циклически проходить по массиву, вероятно, является лучшим способом. Но я бы добавил это в свою функцию и сделаю ее немного более абстрактной:
При этом вы можете не только найти, какой из них содержит «Джон», но и найти, который содержит токен «312312»:
РЕДАКТИРОВАТЬ: Обновлена функция для возврата -1, когда не найден, поэтому она следует той же конструкции, что и Array.prototype.indexOf ()
источник
С сортировочной частью уже ответили. Я просто собираюсь предложить другой элегантный способ получить indexOf свойства в вашем массиве
Ваш пример:
Ты можешь сделать:
Array.prototype.map
недоступно в IE7 или IE8. ES5 СовместимостьИ вот это с ES6 и синтаксисом стрелки, который еще проще:
источник
Если вы в порядке с ES6. Массивы теперь имеют функцию findIndex . Что означает, что вы можете сделать что-то вроде этого:
источник
name: John
), это вернет только первый матчКоторый является упрощенной версией:
С mozilla.org:
источник
token
поле вместоname
поля, то могли бы быть проблемы, какData[0].token == 312312
оцениваетtrue
, ноData[0].token === 321321
оцениваетfalse
.Если у вас есть проблемы с IE, вы можете использовать функцию map (), которая поддерживается начиная с 9.0:
источник
Единственный известный мне способ - перебрать весь массив:
или без учета регистра:
Индекс переменной результата содержит индекс объекта или -1, если не найден.
источник
прототипный способ
источник
Вы можете использовать Array.sort, используя пользовательскую функцию в качестве параметра для определения вашего механизма сортировки.
В вашем примере это даст:
Функция сортировки должна возвращать либо -1, если a должно предшествовать b, 1, если a следует после b, и 0, если оба равны. Вам нужно определить правильную логику в вашей функции сортировки для сортировки массива.
Изменить: пропустил последнюю часть вашего вопроса, где вы хотите узнать индекс. Вы должны были бы пройтись по массиву, чтобы найти это, как сказали другие.
источник
Просто пройдите через ваш массив и найдите позицию:
источник
if(Data[item].name == 'John')
, я исправил это для вас.Это может быть полезно
Скопировал это из https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects
источник
Почему бы вам не использовать небольшой обходной путь?
Создайте новый массив с именами в качестве индексов. после этого все поиски будут использовать индексы. Итак, всего одна петля. После этого вам не нужно перебирать все элементы!
http://jsbin.com/xibala/1/edit
живой пример.
источник
Расширенный ответ Криса Пикетта, потому что в моем случае мне нужно было искать глубже, чем один уровень атрибута:
Вы можете передать attr1.attr2 в функцию
источник
Как насчет этого ? :
Предполагая, что вы используете lodash или underscorejs.
источник
Если у вас есть один объект с несколькими объектами внутри, если вы хотите знать, включен ли какой-либо объект в главный объект, просто поместите find (MasterObject, 'Object to Search'), эта функция вернет ответ, если он существует или нет (TRUE или FALSE ), Я надеюсь помочь с этим, можете увидеть пример на JSFiddle .
источник
источник
источник
Если вы хотите получить значение токена свойства, вы также можете попробовать это
где _.findKey - функция Лодаша
источник
В качестве альтернативы ответу Аттанасио Руиса из Германии вы можете устранить второй цикл, используя Array.reduce () вместо Array.map ();
источник
Используя подчеркивание:
источник