Javascript 在filter()方法中返回值而不是对象

Javascript 在filter()方法中返回值而不是对象,javascript,arrays,methods,foreach,Javascript,Arrays,Methods,Foreach,我有一个简单的代码: 函数getStockOver(库存){ "严格使用",; 返回库存。过滤器(函数(库存){ 回报率(股价>150); }); } var股票=[ {symbol:'XFX',价格:240.22,卷号:23432}, {symbol:'TNZ',价格:110.22,卷数:232}, {symbol:'JXJ',价格:340.22,数量:5632} ]; var符号=getStockOver(股票); 控制台日志(符号)您只需按价格添加即可 函数getStockOver(库

我有一个简单的代码:

函数getStockOver(库存){
"严格使用",;
返回库存。过滤器(函数(库存){
回报率(股价>150);
});
}
var股票=[
{symbol:'XFX',价格:240.22,卷号:23432},
{symbol:'TNZ',价格:110.22,卷数:232},
{symbol:'JXJ',价格:340.22,数量:5632}
];
var符号=getStockOver(股票);
控制台日志(符号)您只需按价格添加即可

函数getStockOver(库存){
"严格使用",;
返回库存。过滤器(函数(库存){
回报率(股价>150);
}).map(功能(库存){
返回股票价格;
});
}
var股票=[
{symbol:'XFX',价格:240.22,卷号:23432},
{symbol:'TNZ',价格:110.22,卷数:232},
{symbol:'JXJ',价格:340.22,数量:5632}
];
var符号=getStockOver(股票);
控制台日志(符号)您只需按价格添加即可

函数getStockOver(库存){
"严格使用",;
返回库存。过滤器(函数(库存){
回报率(股价>150);
}).map(功能(库存){
返回股票价格;
});
}
var股票=[
{symbol:'XFX',价格:240.22,卷号:23432},
{symbol:'TNZ',价格:110.22,卷数:232},
{symbol:'JXJ',价格:340.22,数量:5632}
];
var符号=getStockOver(股票);

控制台日志(符号)您想要的是减少,而不是过滤

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);

你想要的是减少,而不是过滤

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);

您也可以在一行中完成此操作。这些内置函数正是为此目的而设计的

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);

您也可以在一行中完成此操作。这些内置函数正是为此目的而设计的

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);

非常感谢,非常有用,但是我可以问一下如何在新的Object not Array中返回结果吗?那么,如果您希望它像原始的一样,为什么不使用filter呢?像这样
results={price:240.22,price:340}
不确定这是否可以完成,我尝试以空对象作为初始值。这是不可能的。一个对象不能有相同的键。哎呀,我没有注意到:D,我会坚持使用你的reduce方法,我很感激。谢谢你,非常有用,但是我可以问一下如何在新的object not数组中返回结果吗?那么,如果你想要像原始的那样,为什么不使用filter呢?像这样
results={price:240.22,price:340}
我不确定是否可以这样做,我尝试以空对象作为初始值。这是不可能的。一个对象不能有相同的键。哎呀,没注意到:D,我会坚持你的减少方法,我很感激。