[英]How can I filter this array on the bases of value of subarray that the user will tell key and its value
如果用户给出输入var key="value_0"
和var input="hello"
那么如何根据用户给定的值来过滤这个数组,这些值将在typescript中的子数组中,如根据上面给定的输入,它将仅过滤list.data
具有key="value_0"
以及此键的值,如果包含此input="hello"
,它将通过.includes
方法检查
public list: any = [{
"header": "API",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghn",
"value_4": "l"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "CLOUD",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "OTHER HEADER",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "yello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "YET ANOTHER HEADER",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
}
];
如果用户给出key => value_o
和input=> hel
那么我们必须过滤上面的列表,就像我们必须进入数据并搜索这个key =>
如果我们找到然后检查它的值是否包含该文本user被赋予input =>hell
,结果将是过滤后的数组,其中包含键和值包括用户输入因此,对于key=>'value_0'
和input ='hell'
结果将是相同的,因为在每个索引中的数据属性具有子数组,在子数组中,属性value_0
存在,其值具有用户在输入中给出的文本。
[
{
"header": "API",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghn",
"value_4": "l"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "CLOUD",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "OTHER HEADER",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "yello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
},
{
"header": "YET ANOTHER HEADER",
"data": [{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
},
{
"value_0": "hello",
"value_1": "abc",
"value_2": "def",
"value_3": "ghi",
"value_4": "jkl"
}
]
}
];
1)
any.map(el=>({header:el.header,data: el.data.filter(data=>data[key] && data[key].includes(input))})).filter(el=>el.data.length);
输出:
...
data: [
{
value_0: "hello",
value_1: "abc",
value_2: "def",
value_3: "ghi",
value_4: "jkl"
}
//second obj removed, as it contains yello != hel
],
header: "OTHER HEADER"
...
http://jsbin.com/higopoloka/edit?console,js
2)如果你只想要'value_0'而不是整个封闭数组,你可以这样做:
any.map(el=>({header:el.header,data: el.data.reduce((arr,obj)=>obj[key]&&obj[key].includes(input)?!arr.push([obj[key]])||arr:arr,[])})).filter(el=>el.data.length);
输出:
[{
data: [],//ive removed the value_0 here to show what happens
header: "API"
},
{
data: [["hello"], ["hello"]],
header: "CLOUD"
},
{
data: [["hello"]],//only one, as yello !== hel
header: "OTHER HEADER"
},
{
data: [["hello"], ["hello"]],
header: "YET ANOTHER HEADER"
}]
1/2)如果您还想要主要元素在数据为空时隐藏,请执行此操作(这已经是高位代码的一部分):
.filter(el=>el.data.length);
您可以在javascript中使用循环来迭代数组并检查是否找到了该数组。 请参阅代码段
var list = [{"header":"API","data":[{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghn","value_4":"l"},{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"}]},{"header":"CLOUD","data":[{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"},{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"}]},{"header":"OTHER HEADER","data":[{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"},{"value_0":"yello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"}]},{"header":"YET ANOTHER HEADER","data":[{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"},{"value_0":"hello","value_1":"abc","value_2":"def","value_3":"ghi","value_4":"jkl"}]}]; var key = 'value_0'; var val = 'hello'; var search = ''; for(var i in list) { for(var j in list[i]['data']) { if(typeof(list[i]['data'][j][key]) != 'undefined' && list[i]['data'][j][key] == val) { search = list[i]['data'][j]; break; } } } console.log(search)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.