将js对象数组转换为关联数组

时间:2020-02-17 06:36:42

标签: javascript arrays

通过使用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"
  }
]

有没有办法做到这一点?请给我一个主意。 谢谢!

3 个答案:

答案 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)

相关问题