通过使用array.push()我正在更新以下数组。我想向对象数组中的每个对象添加索引/键,因为我想检查是否存在在推送新项目之前存在具有相同索引/键的记录。
我的数组就像
$data = [
{
"id": 37,
"permit_id": 1,
"document_description": "zzxc",
"file_name": "zxc"
},
{
"permit_id": "1",
"document_description": "aa",
"file_name": "az"
},
{
"permit_id": "1",
"document_description": "aax",
"file_name": "azx"
}
]
我想将其转换为
[
0 => {
"id": 37,
"permit_id": 1,
"document_description": "zzxc",
"file_name": "zxc"
},
1 => {
"permit_id": "1",
"document_description": "aa",
"file_name": "az"
},
2 => {
"permit_id": "1",
"document_description": "aax",
"file_name": "azx"
}
]
有没有办法做到这一点?请给我一个主意。 谢谢!
答案 0 :(得分:4)
JS中没有关联数组之类的东西。您需要将其转换为对象。
您可以使用spread operator
将数组转换为对象:let myObj = {...$data}
let $data=[{id:37,permit_id:1,document_description:"zzxc",file_name:"zxc"},{permit_id:"1",document_description:"aa",file_name:"az"},{permit_id:"1",document_description:"aax",file_name:"azx"}];
let myObj = {...$data}
console.log(myObj);
更新
如果要搜索数组以检查是否已存在具有属性的对象,则可以使用Array.some()
let $data=[{id:37,permit_id:1,document_description:"zzxc",file_name:"zxc"},{permit_id:"1",document_description:"aa",file_name:"az"},{permit_id:"1",document_description:"aax",file_name:"azx"}];
let existingObj = {id:37,permit_id:1,document_description:"zzxc",file_name:"zxc"}
let nonexistingObj = {id:38,permit_id:1,document_description:"foo",file_name:"bar"}
if(!$data.some(item => item.id === existingObj.id)){
$data.push(existingObj)
console.log(`ID: ${existingObj.id} pushed`);
}else{
console.log(`ID: ${existingObj.id} already exists!`);
}
if(!$data.some(item => item.id === nonexistingObj.id)){
$data.push(nonexistingObj)
console.log(`ID: ${nonexistingObj.id} pushed`);
}else{
console.log(`ID: ${nonexistingObj.id} already exists!`);
}
console.log($data);
答案 1 :(得分:0)
基本上,这就是您已经拥有的。对象数组实际上是键为整数的关联数组-都扩展Object
。
答案 2 :(得分:0)
您可以使用forEach
循环。数组不能像对象一样具有键和值对,因此必须制作一个额外的对象,以便使用数字键
var x=[
{
"id": 37,
"permit_id": 1,
"document_description": "zzxc",
"file_name": "zxc"
},
{
"permit_id": "1",
"document_description": "aa",
"file_name": "az"
},
{
"permit_id": "1",
"document_description": "aax",
"file_name": "azx"
}
]
var obj={};
x.forEach((e,j)=>{
obj[j+'=>']=e;
})
x=[obj]
console.log(x)