我有一个对象数组,我试图根据用户传递的参数删除特定项目,
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)
}
}
简单来说,我要进行的测试是 如果用户的标题或正文与数组中的标题或正文不匹配,请将此项放在新数组中,因此我将获得一个经过过滤的数组。
但是,发生的是上面的代码,删除了所有内容,并返回了一个空数组。 有人可以帮助纠正上述逻辑吗? 预先感谢
答案 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)
回调 函数是一个谓词,用于测试数组的每个元素。返回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
或显式返回值。
{}