首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环通过JS对象返回值的匹配结果。

循环通过JS对象返回值的匹配结果。
EN

Stack Overflow用户
提问于 2017-11-16 02:49:39
回答 3查看 1.9K关注 0票数 1

我有个东西,全是鲑鱼。我想检查一下三文鱼是新鲜的还是冷冻的。如果冷冻了,就不放一堆,如果新鲜,就放一堆。如果盎司小于2和大于6,则没有一堆,如果它与2-6匹配,则是一堆。

然后,在“是”一堆中,我想遍历这些键和值,找到最便宜的一个,然后打印出来。

到目前为止,这是我所拥有的,但为了运行检查,我似乎被困在大对象的循环中。

我该怎么做?

代码语言:javascript
复制
function findSalmon(salmonInStore){
  var noPile, 
      yesPile; 
      var salmon = Object.keys(salmonInStore));
  for(var key in salmonInStore){

    if(salmonInStore.key.freshness !== 'fresh'){
      noPile.push(salmonInStore.key);
    } else {
      yesPile.push(salmonInStore.key);
    }
    if(salmonInStore.key.ounces < 2 && salmonInStore.key.ounces > 6){
      noPile.push(key);
    }else {
      yesPile.push(salmonInStore.key);
    }
  }
  return yesPile;
}

var salmonInStore = {
  salmon1 : {
    ounces: 1,
    freshness: 'frozen',
    price: 16
  },

 salmon2 : {
    ounces: 6,
    freshness: 'fresh',
    price: 10
  },

  salmon3 : {
    ounces: 2,
    freshness: 'frozen',
    price: 20
  },

  salmon4 : {
    ounces: 5,
    freshness: 'fresh',
    price: 1
  },

  salmon5 : {
    ounces: 3,
    freshness: 'frozen',
    price: 12
  }
}

findSalmon(salmonInStore);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-16 02:59:23

首先,我们可以按价格对鲑鱼单进行排序。

代码语言:javascript
复制
const salmonList = Object.keys(salmonInStore)
  .map(key => salmonInStore[key])
  .sort((a,b) => {
    if (a.price < b.price)
      return -1;
    if (a.price > b.price)
      return 1;

    return 0;
});

然后我们可以过滤掉是的鱼。

代码语言:javascript
复制
const yesPile = salmonList.filter((salmon) => {
 return salmon.ounces >= 2 && salmon.ounces <= 6 && salmon.freshness === 'fresh';
});

yesPile[0] // cheapest fish

看看小提琴来找一个有用的例子。

https://jsfiddle.net/y1jg01wy/

票数 2
EN

Stack Overflow用户

发布于 2017-11-16 02:57:06

代码语言:javascript
复制
function findSalmon(salmonInStore){
var yesPile = [];
var noPile = [];
Object.keys(salmonInStore).forEach( (key)=> {
  var salmon = salmonInStore[key]

  if (salmon.freshness !== 'fresh' || salmon.ounces < 2 && salmon.ounces > 6){
    noPile.push(key);
  } else {
    yesPile.push(key);
  }
})
return yesPile;
}
票数 2
EN

Stack Overflow用户

发布于 2017-11-16 02:55:42

为了进行检查,我似乎被困在了大物体上。

对象也称为键/值对。

您可以使用Object.keys获取对象的键。从那时起,您需要使用括号表示法进行嵌套循环和动态值访问,以便根据使用Object.keys时得到的键获得k/v对的值。

下面是一个例子:

代码语言:javascript
复制
var salmonInStore = {
  salmon1 : {
    ounces: 1,
    freshness: 'frozen',
    price: 16
  },

 salmon2 : {
    ounces: 6,
    freshness: 'fresh',
    price: 10
  }
}

Object.keys(salmonInStore).forEach(storeKey => {
  var salmon = salmonInStore[storeKey]
  // put per salmon logic here...

  Object.keys(salmon).forEach(salmonKey => {
    var value = salmon[salmonKey] // value for each key  
    console.log(value)
    // put per salmon value logic here...
  })
})

但是,如果您计划拥有任意的嵌套级别--而不仅仅是1级,您将需要一个递归函数来遍历您的鲑鱼。

通过使用reduce而不是forEach,可以使上述功能更加“实用”,但这是另一回事。

上面的要点是您需要Object.keyssomeObj[key]。我已经用forEach替换了您的forEach循环,以代替简洁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47320746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档