Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何过滤多维数组对象_Javascript_Json - Fatal编程技术网

Javascript 如何过滤多维数组对象

Javascript 如何过滤多维数组对象,javascript,json,Javascript,Json,例如,我想通过attributevalue过滤这个数组 如果我用蓝色搜索,那么所有的衬衫给我一个蓝色,然后我用蓝色搜索织物棉,然后用蓝色搜索所有的棉布,你知道的,像flipkart,亚马逊搜索 var myObject= [ { "Product-name": "Shirt", "product-price": "500", "attrib

例如,我想通过
attributevalue
过滤这个数组 如果我用蓝色搜索,那么所有的衬衫给我一个蓝色,然后我用蓝色搜索织物棉,然后用蓝色搜索所有的棉布,你知道的,像flipkart,亚马逊搜索

var myObject=    [
                {
                    "Product-name": "Shirt",
                    "product-price": "500",
                    "attributevalue": [
                        { "color": "red" },
                        {"fabric": "cottton"}
                    ]
                },
                {
                    "Product-name": "Samsung mobile",
                    "product-price": "15000",
                    "attributevalue":[
                        {"Ram": "4 GB"},
                        {"Network": "4G"},
                        {"Primary Camera": "8 MP"},
                        {"Internal Memory": "8 GB"}
                    ]
                }
            ]
尝试这样做:

const filterBy = (obj, attr, query) => 
   obj.filter((prod) => prod.attributevalue && prod.attributevalue[attr] === query);

您可以在中将过滤器、
for
和for…组合在一起执行以下操作:

var myObject=[
{
“产品名称”:“衬衫”,
“产品价格”:“500”,
“属性值”:[
{“颜色”:“红色”},
{“织物”:“Cotton”}
]
},
{
“产品名称”:“三星手机”,
“产品价格”:“15000”,
“属性值”:[
{“Ram”:“4GB”},
{“网络”:“4G”},
{“主摄像机”:“8MP”},
{“内存”:“8GB”}
]
}
]
常量搜索=(arr,搜索)=>{
返回arr.filter(项目=>{
对于(变量i=0;ilog(search(myObject,'red'))
只有数组的
过滤器
方法会起作用

var myObject=[{
“产品名称”:“衬衫”,
“产品价格”:“500”,
“属性值”:[{
“颜色”:“红色”
}, {
“织物”:“科顿”
}]
}, {
“产品名称”:“三星手机”,
“产品价格”:“15000”,
“属性值”:[{
“Ram”:“4 GB”
}, {
“网络”:“4G”
}, {
“主摄像机”:“8MP”
}, {
“内部存储器”:“8 GB”
}]
}]
函数findProduct(属性,搜索字段){
返回myObject.filter((x)=>{
const result=x.attributevalue.filter((y)=>y[属性]==searchField);
如果(结果长度){
返回x;
}
})
}

log(findProduct('Network','4G'))
这是一种支持多个筛选(多个键和值)和多个支持键值检查的方法

例行程序是:

  • 在所需对象上应用过滤器
  • 将属性值数组映射到包含键(字符串)和值的单个对象
  • 计算searchBy参数,该参数保存一个包含键的对象,该键是被搜索的键,其值可以是基元、对象或函数。如果这是一个函数,它将通过传递的参数进行计算,该参数是当前要搜索的循环值
  • 返回是否有任何搜索条件匹配
var myObject=[
{
“产品名称”:“衬衫”,
“产品价格”:“500”,
“属性值”:[
{“颜色”:“红色”},
{“织物”:“Cotton”}
]
},
{
“产品名称”:“三星手机”,
“产品价格”:“15000”,
“属性值”:[
{“Ram”:“4GB”},
{“网络”:“4G”},
{“主摄像机”:“8MP”},
{“内存”:“8GB”}
]
}
];
功能过滤器By(obj、searchBy){
返回对象筛选器(项=>{
const_assigned=Object.assign({},…item.attributevalue);
返回Object.entries(searchBy).some([k,v])=>{
返回分配的[k]&(typeof(v)==“function”?v.call(null,[k]):\u分配的[k]==v);
});
});
}
//样品按颜色和面料过滤。
console.log(过滤器比(myObject、{
颜色:“红色”,
织物:(针)=>针==='Cotton'
}));
//用于检查“RAM”值是否存在以及小写时是否为“4 gb”的回调筛选器示例
console.log(
过滤比(myObject{
Ram:(Ram)=>{
返回ram&&ram.toLowerCase()=='4 gb'
}
})

);能否显示您尝试实现所需结果的内容?是否要按一个属性进行筛选?或者通过多个属性?如果你不在过滤器回调中添加一个
return
,这将永远不会起作用。是的,我忘了删除{},这仍然不会起作用,因为
attributevalue
是一个对象数组,因此
prod.attributevalue[attr]
查找将不起作用,除非首先将数组映射到对象。您应该更改查找的方法:)。