2016-10-06 12 views
1

私はこの単純なコードがあります:.filter()stock.price > 150は、それをスキップそうでない場合、それを返す場合戻り値()メソッド

function getStockOver(stocks) { 
 
    'use strict'; 
 
    return stocks.filter(function (stock) { 
 
     return (stock.price > 150); 
 
    }); 
 
} 
 

 
var stocks = [ 
 
    { symbol: 'XFX', price: 240.22, volume: 23432}, 
 
    { symbol: 'TNZ', price: 110.22, volume: 232}, 
 
    { symbol: 'JXJ', price: 340.22, volume: 5632} 
 
]; 
 
var symbols = getStockOver(stocks); 
 

 
console.log(symbols);

チェックを。 しかし、私は.filter()によって作成された新しい配列のpriceのみを返したいのですが、オブジェクト全体ではありません。

注:私はこれが.forEach()を介して行うことができます知っているが、.filter()は道が容易です。

答えて

3

価格はArray#mapです。

function getStockOver(stocks) { 
 
    'use strict'; 
 
    return stocks.filter(function (stock) { 
 
     return (stock.price > 150); 
 
    }).map(function (stock) { 
 
     return stock.price; 
 
    }); 
 
} 
 

 
var stocks = [ 
 
    { symbol: 'XFX', price: 240.22, volume: 23432}, 
 
    { symbol: 'TNZ', price: 110.22, volume: 232}, 
 
    { symbol: 'JXJ', price: 340.22, volume: 5632} 
 
]; 
 
var symbols = getStockOver(stocks); 
 

 
console.log(symbols);

4

、あなたはまた、単一の行でこれを行うことができます

var stocks = [ 
    { symbol: 'XFX', price: 240.22, volume: 23432}, 
    { symbol: 'TNZ', price: 110.22, volume: 232}, 
    { symbol: 'JXJ', price: 340.22, volume: 5632} 
]; 
var results = stocks.reduce(function (a,o) { if(o.price > 150) a.push(o.price); return a; }, []); 
console.log(results); 
+0

は非常に便利な、このいただきありがとうございます、しかし、私は新しいオブジェクトではない配列で結果を返すためにどのように求めることができますか? – MuhammadJ

+0

オブジェクトがどのように見えるかわからない..... – epascarello

+0

元のようにしたいのであれば、なぜフィルタを使用しないのですか? – epascarello

1

をフィルタリングし、ない減らしたいです。これらの組み込み関数は、まさにこの目的のために作られています。あなたはまた、オブジェクトと、もう少し複雑な何かを行うことができます

​​

var StockList = function(_data) { 
    this.data = _data; 
}; 
StockList.prototype.getStocksOver = function(overPrice) { 
    return new StockList(this.data.filter(function (stock) { 
     return stock.price > overPrice; 
    })); 
}; 
StockList.prototype.getPrices = function() { 
    return this.data.map(function (stock) { 
     return stock.price; 
    }); 
}; 

var stocks = new StockList([ 
    { symbol: 'XFX', price: 240.22, volume: 23432 }, 
    { symbol: 'TNZ', price: 110.22, volume: 232 }, 
    { symbol: 'JXJ', price: 340.22, volume: 5632 } 
]); 

var pricesOver150 = stocks.getStocksOver(150).getPrices(); 

console.log(pricesOver150);