Node.Js使用.filter方法从数组中删除一项

时间:2018-08-13 16:56:44

标签: javascript arrays node.js

我有一个对象数组,我试图根据用户传递的参数删除特定项目,

func TestlistEntity(t *testing.T){

    e := echo.New()

    req := httptest.NewRequest(echo.GET, "/", nil)
    rec := httptest.NewRecorder()
    c := e.NewContext(req, rec)
    c.SetPath("/api/v1/entity/list")


    if assert.NoError(t, EntityList(c)) {
        assert.Equal(t, http.StatusOK rec.Code)
    }
}

简单来说,我要进行的测试是 如果用户的标题或正文与数组中的标题或正文不匹配,请将此项放在新数组中,因此我将获得一个经过过滤的数组。

但是,发生的是上面的代码,删除了所有内容,并返回了一个空数组。 有人可以帮助纠正上述逻辑吗? 预先感谢

4 个答案:

答案 0 :(得分:3)

通过箭头功能添加 return 语句或删除大括号:)

myArray = myArray.filter(item => {
  return item.title != title || item.body != body;
});

myArray = myArray.filter(item => item.title != title || item.body != body);

答案 1 :(得分:2)

您需要向过滤器函数返回一个boolean值。返回true保留元素,否则返回false。 当前,您返回的是undefined,这是错误的。

let myArray = [
  {title : 'title 1', body: 'body of title one'},
  {title : 'title 2', body: 'body of title two'},
  {title : 'title 3', body: 'body of title three'}
]
let title = "title 1";
let body = "body of title one";


let filteredArray = myArray.filter((item) =>item.title != title || item.body != body);

 console.log(filteredArray);

供参考:Array.filter()

答案 2 :(得分:2)

From MDN Filter page

  

回调   函数是一个谓词,用于测试数组的每个元素。返回true保留元素,否则返回false。它接受三个参数:

您的回调函数没有任何return关键字。默认情况下,JS会将其解释为undefined,即非真实/假值。因此,所有项目均不符合过滤条件,您将得到一个空数组。

此外,正如其他人指出的那样,您缺少括号。

let filteredArray = myArray.filter(item => {
    return item.title != title || item.body != body;
});

答案 3 :(得分:0)

如果要过滤 正文标题不匹配的情况,则实际上需要使用{{1}在您的布尔值中。

例如,如果您的&&是“标题1”,而您的title是“标题2的主体”,则它应该返回的唯一项是body,因为这是唯一的 标题和正文都不匹配。

自然地,您需要从过滤器回调中返回此结果,因此请删除函数主体周围的title 3或显式返回值。

{}