【发布时间】:2018-09-12 19:14:02
【问题描述】:
我有一个元素数组如下
实体
[
{
"name":"tiger",
"imageurl":"https://someurl.com",
"type":"animal"
},
{
"name":"cat",
"imageurl":"https://someurl.com",
"type":"animal"
},
{
"name":"parrot",
"imageurl":"https://someurl.com",
"type":"bird"
},{
"name":"potato",
"imageurl":"https://someurl.com",
"type":"vegetable"
},
{
"name":"orange",
"imageurl":"https://someurl.com",
"type":"fruit"
},
{
"name":"orange",
"imageurl":"https://someurl.com",
"type":"colour"
}
]
我还有一个数组如下
elemToRemove
[orange@fruit,cat@animal,tiger@animal]
我想删除具有name=orange 和type=fruit、name=cat 和type=animal、name=tiger 和type=animal 的元素
很容易通过对数组使用过滤器来删除基于单个属性的元素,但在这种情况下,我无法使用 map/filter/reduce 来删除这些元素。
我使用 split 来创建名称和类型数组并尝试这样做,但由于我们重复输入,条件总是返回 false。
let nameArray = elemToRemove.map(function (elem) {
return elem.split('@')[0];
});
let typeArray= elemToRemove.map(function (elem) {
return elem.split('@')[1];
});
var reqData= entities.filter(function (obj) {
return (nameArray.indexOf(obj.name) === -1 && typeArray.indexOf(obj['env']) === -1);
});
因此总是给我一个空的 reqData 数组。我没有提供 id 的规定,否则我可以使用 id 来删除元素。
预期输出
[
{
"name":"parrot",
"imageurl":"https://someurl.com",
"type":"bird"
},{
"name":"potato",
"imageurl":"https://someurl.com",
"type":"vegetable"
},
{
"name":"orange",
"imageurl":"https://someurl.com",
"type":"colour"
}
]
实现此目的最优雅的方法是什么?
【问题讨论】:
-
首先真的没有“JSON 对象”这样的东西。
-
当您说
I am not able to put up map/filter/reduce时,您的意思是您不能使用它们?或者你不知道怎么做? -
哦,我的意思是我尝试以代码 sn-p 中提到的方式或其他方式使用 filter/map/reduce,但未能获得有效的输出,我绝对可以使用任何它是不是测试或作业:D
-
@Usman 感谢指出,我会马上修改
标签: javascript arrays json iteration