我有一个2D数组,需要根据内部数组的数据进行过滤
我尝试映射,然后过滤内部数组的数据-但随后我丢失了第一个数组的数据。
我在下面编写了一个过滤器函数,但是它不能正常工作-查看filteredData变量
var data =
[
{
"batch_id": "1",
"data": [
{
"identifier": "aa",
"type": "video"
},
{
"identifier": "ab",
"type": "image"
}
],
"internal_batch_id": 72
},
{
"batch_id": "2",
"data": [
{
"identifier": "a",
"type": "image"
},
{
"identifier": "b",
"type": "image"
}
],
"internal_batch_id": 72
}
]
var type = 'video'
var filteredData =
data.map((item, i) => {
return item.data.filter((item1, idx) => {
return item1.type.toUpperCase() === type.toUpperCase()
})
})
我想发生的是,仅显示类型==='视频'的项目。因此数据将变为
{
"batch_id": "1",
"data": [
{
"identifier": "aa",
"type": "video"
}
],
"internal_batch_id": 72
}
答案 0 :(得分:-1)
我不确定您的预期成绩应该是多少。要么,您要使用带过滤器的地图:
按每种类型属性过滤嵌套数据道具
-v /path/to/postgresql-persistence:/bitnami/postgresql
或者您正在寻找将过滤器用于某些用途:
将整个数据对象过滤为类型为“视频”的对象
var data = [
{
batch_id: '1',
data: [{ identifier: 'aa', type: 'video' }, { identifier: 'ab', type: 'image' }],
internal_batch_id: 72
},
{
batch_id: '2',
data: [{ identifier: 'a', type: 'image' }, { identifier: 'b', type: 'image' }],
internal_batch_id: 72
}
]
console.log(data.map(o => ({...o, data:o.data.filter(v => v.type === 'video')})))
或者两者皆是
同时过滤整个数据对象,并过滤嵌套的数据。
var data = [
{
batch_id: '1',
data: [{ identifier: 'aa', type: 'video' }, { identifier: 'ab', type: 'image' }],
internal_batch_id: 72
},
{
batch_id: '2',
data: [{ identifier: 'a', type: 'image' }, { identifier: 'b', type: 'image' }],
internal_batch_id: 72
}
]
console.log(data.filter(o => o.data.some(v => v.type === 'video')))
答案 1 :(得分:-1)
您需要执行2个操作,
video
元素的所有对象过滤父列表video
个对象。为此,您可以使用.reduce
+ .filter
.reduce
创建新对象并创建数组.filter
以仅获取其中已过滤的项目。
var data = [{ "batch_id": "1", "data": [{ "identifier": "aa", "type": "video" }, { "identifier": "ab", "type": "image" } ], "internal_batch_id": 72 }, { "batch_id": "2", "data": [{ "identifier": "a", "type": "image" }, { "identifier": "b", "type": "image" } ], "internal_batch_id": 72 }]
var type = 'video'
var filteredData = data.reduce((acc, obj) => {
const innerObj = obj.data.filter((typeObj) => typeObj.type === type);
if(innerObj.length !== 0) {
acc.push( { ...obj, data: innerObj} );
}
return acc;
}, [])
console.log(filteredData)