[英]Return values instead of objects in filter() method
我有這個簡單的代碼:
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()
檢查stock.price > 150
,然后返回它,否則跳過它。 但是我只想返回通過.filter()
創建的新數組中的price
,而不是整個對象,如何返回?
注意: 我知道這可以通過.forEach()
完成,但是.filter()
更容易。
您要減少而不是過濾
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);
您可以僅以價格添加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);
您也可以單行執行此操作。 這些內置函數正是為此目的而制作的。
symbols = stocks.filter(function(stock){
return stock.price > 150
}).map(function(stock){
return stock.price;
});
您還可以對對象做一些復雜的事情:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.