筛选对象

时间:2018-07-21 15:42:59

标签: javascript

此代码可用于过滤我的一个ID。

let symbols =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
  {symbols:"XEE", id:20},
])

function getStocksOver(stocks, id){
  return stocks.filter(function(stock,index){
    return stock.id !=id;
  });
}

console.log(getStocksOver(symbols,1))

现在我希望能够按对象进行过滤

 let symbolsDeleted =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
])

有人知道这样做的方法吗,因为我真的被卡住了。

2 个答案:

答案 0 :(得分:1)

您可以创建一个附加过滤器,以按库存ID过滤symbolsDeleted数组,而不是将每个stock.id与单个ID进行比较。

如果没有匹配项,则过滤结果的长度将为0。

在这种情况下,您将true返回外部过滤器函数。

如果找到匹配项,则返回false。

let symbolsDeleted =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
])

let symbols =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
  {symbols:"XEE", id:20},
])

function getStocksOver(stocks, objArray){
  return stocks.filter(function(stock, index) {
    return objArray.filter(function(value) {
      return value.id == stock.id
    }).length == 0;
  });
}

console.log(getStocksOver(symbols, symbolsDeleted))

答案 1 :(得分:1)

我认为您可以使用地图和过滤器

const symbolsDeleted =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
])

let symbols =([
  {symbols:"XFX", id:1},
  {symbols:"XFF", id:2},
  {symbols:"XEE", id:20},
])

function getStocksOver(stocks, oObject) {
  const keys = oObject.map(o => o.id);
  return stocks.filter((s) => !keys.includes(s.id));
}

console.log(getStocksOver(symbols, symbolsDeleted));