我有一个充满鲑鱼的物体。我想循环检查鲑鱼是新鲜还是冷冻。如果冷冻,不要堆放,如果新鲜,放入是堆。如果盎司小于2且大于6,则没有堆积,如果它匹配2-6,则堆积。
然后,使用yes堆,我想循环遍历这些键和值以找到最便宜的一个,并将其打印出来。
这是我到目前为止所做的事情,但我似乎一直在循环通过大对象来运行检查。
我该怎么做?
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);
答案 0 :(得分:2)
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;
}
答案 1 :(得分:2)
首先,我们可以按价格对鲑鱼清单进行排序。
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;
});
然后我们可以过滤掉是鱼。
const yesPile = salmonList.filter((salmon) => {
return salmon.ounces >= 2 && salmon.ounces <= 6 && salmon.freshness === 'fresh';
});
yesPile[0] // cheapest fish
查看小提琴的工作示例。
答案 2 :(得分:1)
为了运行检查,我似乎停留在循环大对象上。
对象也称为键/值对。
您可以使用Object.keys
获取对象的键。从那时起,您需要使用bracket notation 嵌套循环和动态值访问,以根据您使用时获得的密钥获取ak / v对的值{1}}。
以下是一个例子:
Object.keys
&#13;
但是如果你计划拥有任意的嵌套级别 - 不只是1级,你需要一个递归函数来走你的鲑鱼。
以上可以更具功能性&#39;使用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...
})
})
代替reduce
,但这是另一个故事。
上述要点是您需要forEach
和Object.keys
。我为了简洁起见,用someObj[key]
替换了for..
循环。