【问题标题】:How to replace/change the array value with arrayobject value in javascript如何在javascript中用数组对象值替换/更改数组值
【发布时间】:2021-09-29 09:48:39
【问题描述】:

如何在javascript中通过数组值改变嵌套数组对象。

我有数组对象nestobj和数组arr,如果位置和数组匹配,则替换javascript中的值。

我需要知道如何用相同的变量名更改数组对象nestobj

var nestobj =[
  {id:1, name: "xyz", place: "CH"},
  {id:2, name: "zen", place: "JP"},
  {id:3, name: "abc", place: "TH"},
  {id:4, name: "ram", place: "MY"},
  {id:5, name: "mike", place: "AU"},
]


var arr=[
  "JP:Japan",
  "CH:Chennai",
  "AU:Australia"
]


Expected Ouput
[
  {id:1, name: "xyz", place: "Chennai"},
  {id:2, name: "zen", place: "Japan"},
  {id:3, name: "abc", place: "TH"},
  {id:4, name: "ram", place: "MY"},
  {id:5, name: "mike", place: "Australia"},
]

arr.map(ii=>{
  var kv = ii.split(':');
  nestobj.map(e=>{
    if(e.place === kv[0]){
   return { 
 ...e,
 place: kv[1]
    }
else{
   ...e,
  place: e.place
  }
   }
  })

})

console.log(nestobj)

【问题讨论】:

标签: javascript arrays loops object


【解决方案1】:

我的方式...

const nestobj = 
  [ { id: 1, name: 'xyz',  place: 'CH' } 
  , { id: 2, name: 'zen',  place: 'JP' } 
  , { id: 3, name: 'abc',  place: 'TH' } 
  , { id: 4, name: 'ram',  place: 'MY' } 
  , { id: 5, name: 'mike', place: 'AU' } 
  ] 

const arr = [ 'JP:Japan', 'CH:Chennai', 'AU:Australia' ] 

const country =  Object.fromEntries(arr.map(e=>e.split(':')))

nestobj.forEach((e,i,a)=> { a[i].place =  country[e.place] ?? e.place })

console.log( nestobj )
.as-console-wrapper {max-height: 100%!important;top:0 }

【讨论】:

    【解决方案2】:

    这是你的意思吗?

    let nestobj =[
        {id:1, name: "xyz", place: "CH"},
        {id:2, name: "zen", place: "JP"},
        {id:3, name: "abc", place: "TH"},
        {id:4, name: "ram", place: "MY"},
        {id:5, name: "mike", place: "AU"},
      ]
    
      const arr=[
        "JP:Japan",
        "CH:Chennai",
        "AU:Australia",
      ]
    
      nestobj = nestobj.map((item, index) => {
        for(let i = 0; i < arr.length; i++) {
          const key = arr[i].split(":")[0]
          const value = arr[i].split(":")[1]
    
          if(item["place"] === key) {
            item["place"] = value
          }
        }
        return item
      })
      
      console.log(nestobj)
    

    新的nestobj 将是:

    [
      {id:1, name: "xyz", place: "Chennai"},
      {id:2, name: "zen", place: "Japan"},
      {id:3, name: "abc", place: "TH"},
      {id:4, name: "ram", place: "MY"},
      {id:5, name: "mike", place: "Australia"},
    ]
    

    我建议你使用let(用于动态变量)和const(用于静态变量)来避免在Javascript中使用hoisting

    【讨论】:

      猜你喜欢
      • 2015-03-31
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2018-10-18
      • 2021-01-27
      • 2018-09-11
      • 2021-10-29
      相关资源
      最近更新 更多