簡體   English   中英

返回值,而不是filter()方法中的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM