【问题标题】:How to return string attached to largest integer in an array (Javascript)如何返回附加到数组中最大整数的字符串(Javascript)
【发布时间】:2018-06-18 21:41:00
【问题描述】:

所以我有一个函数,它接收一个对象数组,其参数为 (name, traffic),其中 name 是 String,traffic 是 int。例如 [{"Monday",12},{"Tuesday",10}] 该函数应该返回具有最高流量值的名称/名称

但是我不知道如何只返回与对象关联的名称,例如“星期一”,或者如何在数组中返回共享最高流量的对象的多个名称。例如 [“星期一”、“星期二”]

这是我目前的代码;

function mostPopularDays(week) {
 if (week == null || week == []){
  return null;
 }
 /*just so it returns null if nothing is given*/
 var arr = [];
 var largest = week[0];
 for (var i = 0; i<week.length; i++){
   if (largest < week[i]){
    largest = week[i]
      }
    }
 arr.push(largest);
 /*takes the largest value and puts it in an array*/
 for (var i = 0; i<week.length; i++){
   if (week[i.] == largest){
    arr.push(week[i]);
     }
   }
 /*takes values that have the same amount and adds them to the array*/
 if(arr.length = 1){
 return arr[0]
   }
 /*returns the object if the array has just one entry*/
 return arr;
 }

【问题讨论】:

  • {"Monday",12} 语法无效。
  • if(arr.length = 1) 不是比较。 week == []永远按您的预期工作(请参阅下面的评论)。 week[i.] 无效。
  • @Xufox 更糟的是,例如当week === 0
  • @ASDFGerte 我知道,这只是为了证明我正在将对象输入到数组中
  • @Xufox 该评论是在谈论它上面而不是下面发生的事情

标签: javascript arrays string function object


【解决方案1】:

您需要将对象作为键值对传递给数组。

function mostPopularDays(week) {
 if (week == null || week == []){
  return null;
 }
 /*just so it returns null if nothing is given*/
 var arr = [];
 var largest = week[0].traffic;
 for (var i = 0; i<week.length; i++){
   if (largest < week[i].traffic){
    largest = week[i].traffic
      }
 }

 /*takes the largest value and puts it in an array*/
 for (var i = 0; i<week.length; i++){
   if (week[i].traffic == largest){
    arr.push(week[i].name);
    }
 }
 
if(arr.length==1)
{
  arr = arr[0];
}
 
return arr; 
}

var obj1 = [{name:"Monday",traffic:10},{name:"Sunday",traffic:20},{name:"Wednesday",traffic:22}];

//will return string 
console.log(mostPopularDays(obj1));

var obj2 = [{name:"Monday",traffic:10},{name:"Sunday",traffic:20},{name:"Wednesday",traffic:20}];

//will return array
console.log(mostPopularDays(obj2));

【讨论】:

  • 谢谢,只有一个问题。如果只有一个流量最高的对象,我希望获得一个字符串而不是数组,但是当我创建一个 if 语句来处理这个问题时,当两个或更多对象的流量最高时,它无法返回一个数组。这是不可避免的吗?
  • @Anton 让我对其进行更改,它会起作用。
  • @Anton 刚刚添加了您需要的内容
【解决方案2】:

根据您的问题(假设您的流量值是正整数。),这里是代码:

function mostPopularDays(week) {
          if (week == null || week == []){
            return null;
          }
          /*just so it returns null if nothing is given*/
          //based on what you explained 'week' looks like [{'name': 'Monday', 'traffic': 10},.....]
          var arr = [];
          var max = 0;
          //checking for the maximum traffic value available in the week array
          for (var i = 0; i < week.length; i++) {
            if(week[i].traffic > max) {
              max = week[i].traffic;
            }
          }
          // push all the objects with max traffic value
          for (var i = 0; i<week.length; i++) {
            if (week[i].traffic === max){
              arr.push(week[i].name);
            }
          }
          if(arr.length > 1) {
            return arr;
          } else if(arr.length === 1) {
            return arr[0].name;
          }
        }
        var x = [{'name': 'Monday', 'traffic': 10}, {'name': 'Sunday', 'traffic': 20}, {'name': 'Tuesday', 'traffic': 12}, {'name': 'Friday', 'traffic': 20},{'name': 'Thursday', 'traffic': 15}];
        console.log(mostPopularDays(x));

但是,正如 ASDFGerte 和 Xufox 所提到的,标准的 JS 对象将具有键值对。您可以查看here

【讨论】:

  • 无法按预期工作。最大的问题:if (week[i] === max){。正如已经对该问题发表的评论一样,week == [] 根本不是一个好主意
  • 仍然无法按预期工作,您将对象本身推入 arr - arr.push(week[i])
  • @dhaker,我不清楚他想要输出什么,所以请查看它旁边的评论。
  • 我的输出应该是一天,例如“星期一”,或者如果有多个天的流量最高,那么这些天但在一个数组中。例如 ["Monday","Tuesday"] 您的代码有效,但我尝试使用具有相同最高流量的两个对象,并且数组中仅返回第一个对象的名称
【解决方案3】:

一个较短的单行 ES6 替代方案:

var arr = [{name:"Monday",traffic:10},{name:"Sunday",traffic:20},{name:"Wednesday",traffic:20}];

var result = arr.sort((a,b) => b.traffic - a.traffic).filter(({traffic}, i, arr) => traffic === arr[0].traffic).map(({name}) => name);

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多