我正在开发一个angular应用程序。我有以下数据:
data = [
{
"sampleData": [{
"id":"1"
}],
"status": "completed"
},
{
"sampleData": [{
"id":"1"
}],
"status": "not completed"
},
{
"sampleData": [],
"status": "completed"
}
]
上面一个是示例数组。像这样,在运行时,我的数组可以有200-300条记录。我想添加一个属性/字段"category">
如果样本数据长度大于0,则检查状态。如果状态已完成,则属性/字段"category"; "completed&;将被添加。如果状态未完成,则属性/字段"类别": "未完成"添加.
如果样本数据的长度等于0,则"category"; "on hold";属性/字段被添加到数组。
因此,上面的数组在操作之后看起来应该如下所示:
data = [
{
"sampleData": [{
"id":"1"
}],
"status": "completed",
"category": "completed"
},
{
"sampleData": [{
"id":"1"
}],
"status": "not completed"
"category": "not completed"
},
{
"sampleData": [],
"status": "completed"
"category": "on hole"
}
]
同样,在运行时,我可以在数组中有200-300个元素,我需要在上述条件的基础上为每个元素添加类别,并创建最终数组。我怎样才能做到又好又有效率呢?
遍历数组,检查项目的sampleData
属性长度是否大于0
,如果大于,则将项目的category
属性设置为项目的status
属性。否则,设置为"on hold"。
const data = [{
"sampleData": [{
"id": "1"
}],
"status": "completed",
},
{
"sampleData": [{
"id": "1"
}],
"status": "not completed"
},
{
"sampleData": [],
"status": "completed"
}
]
data.forEach(e => e.category = e.sampleData.length > 0 ? e.status : "on hold")
console.log(data)
如果您不想通过使用Array.map
:
改变原始文件,则可以实现相同的逻辑。
const data = [{
"sampleData": [{
"id": "1"
}],
"status": "completed",
},
{
"sampleData": [{
"id": "1"
}],
"status": "not completed"
},
{
"sampleData": [],
"status": "completed"
}
]
const res = data.map(e => ({ ...e,
category: e.sampleData.length > 0 ? e.status : "on hold"
}))
console.log(res)
使用if
语句(根据OP的请求):
const data = [{
"sampleData": [{
"id": "1"
}],
"status": "completed",
},
{
"sampleData": [{
"id": "1"
}],
"status": "not completed"
},
{
"sampleData": [],
"status": "completed"
}
]
data.forEach(e => e.category = e.sampleData.length > 0 ? e.status : "on hold")
console.log(data)
您可以使用Array.map()
:
function addCategory(source) {
return source.map( item => ({
...item,
category: item.sampleData.length === 0
? 'on hold'
: item.status === 'completed'
? 'completed'
: 'non completed';
});
}
.
.
.
const withCategory = addCategory( getMeSomeSourceData() );
这是最简单的了。