我有个东西,全是鲑鱼。我想检查一下三文鱼是新鲜的还是冷冻的。如果冷冻了,就不放一堆,如果新鲜,就放一堆。如果盎司小于2和大于6,则没有一堆,如果它与2-6匹配,则是一堆。
然后,在“是”一堆中,我想遍历这些键和值,找到最便宜的一个,然后打印出来。
到目前为止,这是我所拥有的,但为了运行检查,我似乎被困在大对象的循环中。
我该怎么做?
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);发布于 2017-11-16 02:59:23
首先,我们可以按价格对鲑鱼单进行排序。
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看看小提琴来找一个有用的例子。
发布于 2017-11-16 02:57:06
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;
}发布于 2017-11-16 02:55:42
为了进行检查,我似乎被困在了大物体上。
对象也称为键/值对。
您可以使用Object.keys获取对象的键。从那时起,您需要使用括号表示法进行嵌套循环和动态值访问,以便根据使用Object.keys时得到的键获得k/v对的值。
下面是一个例子:
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.keys和someObj[key]。我已经用forEach替换了您的forEach循环,以代替简洁。
https://stackoverflow.com/questions/47320746
复制相似问题