2016-08-15 8 views
-1

Мне нужно получить длину строки по двум свойствам объектов.Как получить максимальную строку из объектов массива

данные:

[ { 
    Country Code : 'CZ', 
    Country  : 'El Salvador' 
},{ 
    Country Code : 'SVY', 
    Country  : 'Czech' 
} ] 

как получить «Страна:„Сальвадор“и код страны:„SVY“

+0

Что вы попробовали? Вам просто нужно перебрать массив. – 4castle

+0

Вы спрашиваете, как получить строку, которая имеет максимальную длину для всех объектов в этом массиве только для этого свойства? – Josh

ответ

0

Чтобы получить длину каждого в вашем литерала объекта, используйте .length внутри цикла как показано ниже

for (var i = 0; i < data.length; i++){ 
    var countryLen = data[i].country.length; //11 5 
    var countryCodeLen = data[i].countryCode.length; //2 3 
} 

однако, если вы пытаетесь вернуть самую длинную строку в вашем объекте, смотрите ниже

var maxLen = Math.max.apply(Math, data.map(function (o) { return o.countryCode.length })); 

Для получения дополнительной информации о .map() см https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

+0

'maxLen' не самая длинная строка, это длина самой длинной строки - см. Уменьшение, как в моем ответе – Josh

+0

Совершенно верно - я неправильно понял @ вопрос аксона –

0

Ниже приводится решение, которое использует reduce; обратите внимание, что все объекты в arr должны содержать свойство propName.

let longestStr = (arr, prop) => 
    arr.reduce((p,c) => p.length > c[prop].length ? p : c[prop] , '') 

longestStr это функция, которая принимает массив arr и имя свойства prop, который должен быть строкой. Для подробного обсуждения того, как работает reduce, я рекомендовал бы отличный MDN reference.

+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст для * почему * или * как * этот код решает проблему, улучшит долгосрочную ценность этого ответа. –

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