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))