Javascript 按字符串属性值查找对象数组中最长的字符串
我当前有一个如下所示的数组:Javascript 按字符串属性值查找对象数组中最长的字符串,javascript,Javascript,我当前有一个如下所示的数组: var array = [ { "title": "Ender's Game", "genre": "Science Fiction", "year": 2008 }, { "title": "Harry Potter and the Goblet of Fire", "genre": "fantasy", "year": 2002 }, { "title": "Pride and Pred
var array = [
{
"title": "Ender's Game",
"genre": "Science Fiction",
"year": 2008
},
{
"title": "Harry Potter and the Goblet of Fire",
"genre": "fantasy",
"year": 2002
},
{
"title": "Pride and Predjudice",
"genre": "romance",
"year": 1980
}
]
longestGenre(array);
15
我想遍历这个数组,找到最长流派的长度。我想要这样的东西:
var array = [
{
"title": "Ender's Game",
"genre": "Science Fiction",
"year": 2008
},
{
"title": "Harry Potter and the Goblet of Fire",
"genre": "fantasy",
"year": 2002
},
{
"title": "Pride and Predjudice",
"genre": "romance",
"year": 1980
}
]
longestGenre(array);
15
我尝试了以下几点:
var getLongest = (array, key) =>
{
let r = Object.values(array).reduce((res, curr) =>
{
if (!Array.isArray(curr))
return res;
let newMax = curr.reduce(
(r, c) => c[[key]] && (c[[key]].length > r.length) ? c[[key]] : r,
""
);
res = newMax.length > res.length ? newMax : res;
return res;
}, "");
longest = r;
return longest;
}
我尝试的另一种方法是:
for (key in obj){
if (!obj.hasOwnProperty(key)) continue;
if (obj.key.length > longest)
longest = obj.key.length;
}
您不需要所有这些检查和嵌套循环,只需将数组映射到流派的长度,然后取最大值:
const longestGenre = Math.max(...array.map(movie => movie.genre.length));
或动态:
const longest = (key, array) => Math.max(...array.map(it => it[key].length));
console.log(longest("genre", /*in*/ array));
您还可以更干净、更紧凑地使用
reduce
工作片段:
var-arr=[
{
“标题”:“安德的游戏”,
“类型”:“科幻小说”,
“年度”:2008年
},
{
“标题”:“哈利波特与火焰杯”,
“类型”:“幻想”,
“年份”:2002年
},
{
“头衔”:“骄傲与偏见”,
“类型”:“浪漫”,
“年份”:1980年
},
{
“头衔”:“骄傲与偏见”,
“类型”:“asdasdasdasdsa asdasda”,
“年份”:1980年
}
]
var longest=arr.reduce(函数(a,b){返回a.genre.length>b.genre.length?a:b;});
console.log(最长)
您还可以按类型
的长度
的降序对对象长度数组进行排序。然后返回始终保持最大长度的数组的第一个索引
var数组=[{“标题”:“安德的游戏”,“流派”:“科幻小说”,“年份”:2008},{“标题”:“哈利波特与火焰杯”,“流派”:“幻想”,“年份”:2002},{“标题”:“骄傲与偏见”,“流派”:“浪漫”,“年份”:1980}]
函数getLongest(数组){
返回array.map((obj)=>obj.genre.length)。排序((a,b)=>{
return(b-a);//按降序排序
})[0];//第一个元素将保存最长的类型
}
log(getLongest(array))代码>