根据其他对象值更改对象键

时间:2020-05-10 13:38:33

标签: javascript

我试图通过比较两个对象的值来更改对象的键名。如果第二个对象的值与第一个对象匹配,则我想获取第二个对象的键名并将第一个对象的键名更改为相同。 这是我的代码,但是无法将键名SQL> with 2 test (client_no, datum, type) as 3 -- sample data 4 (select 'client 1', date '2014-09-22', '001' from dual union all 5 select 'client 1', date '2014-09-19', '002' from dual union all 6 select 'client 1', date '2014-09-10', '005' from dual union all 7 select 'client 2', date '2014-09-15', '012' from dual union all 8 select 'client 2', date '2014-09-20', '011' from dual 9 ), 10 -- sort them 11 sorted as 12 (select client_no, datum, type, 13 row_number() over (partition by client_no order by datum desc) rn 14 from test 15 ) 16 -- select the one with RN = 1 17 select client_no, datum, type 18 from sorted 19 where rn = 1; CLIENT_NO DATUM TYPE ---------- ---------- ---- client 1 22/09/2014 001 client 2 20/09/2014 011 SQL> 替换为 #My jango website location = /django/ { rewrite /django/(.*) /$1 break; proxy_pass http://localhost:8000; proxy_redirect on; proxy_set_header Host $host; }

parsedCodedParms

示例:

mappingParms

应该结果

for (var [key, value] of Object.entries(parsedCodedParams)) {
  for (var [k, v] of Object.entries(this.mappingParams)) {
    if (v.toLowerCase() == key) {
      parsedCodedParams[key] = this.mappingParams[k];
      console.log(parsedCodedParams[key])
    }
  }
}

2 个答案:

答案 0 :(得分:1)

您要更改的是值,而不是键。无法直接替换密钥,必须添加新密钥并删除旧密钥。

此外,您正在将值与键进行比较,而不是将值进行比较。

let parsedCodedParams = {a: "1", b:"2", c: "3"};
let mappingParams= { d:"1", z:"5"};

for (var [key, value] of Object.entries(parsedCodedParams)) {
  for (var [k, v] of Object.entries(mappingParams)) {
    if (v.toLowerCase() == value) {
      parsedCodedParams[k] = v;
      delete parsedCodedParams[key];
    }
  }
}

console.log(parsedCodedParams)

答案 1 :(得分:0)

使用减少。生成值映射,将值合并为键,丢弃键并将其转换回映射。添加了保留键顺序的版本。

parsedCodedParams = {a: "a",b:"2", c: "3"} 
mappingParams={ d:"A",z:"5"} 

// does not preserve order of parsedCodedParams
console.log(
Object.fromEntries(Object.values( // discard value as keys and convert back to map
  Object.entries(mappingParams).reduce( // merge value as keys from mappingParams
    (acc,x,k) => (acc[k=x[1].toLowerCase()] && (acc[k]=x), acc), 
    // create map of value as keys on parsedCodedParams
    Object.entries(parsedCodedParams).reduce((acc,x)=>(acc[x[1].toLowerCase()]=x,acc), {})
  )
))
);

// preserves order of parsedCodedParams
console.log(
Object.fromEntries(Object.values( // discard index i as key and convert back to map
Object.fromEntries(Object.values( // discard value as keys and convert to map with key as index i
  Object.entries(mappingParams).reduce( // merge value as keys from mappingParams (preserving index i)
    (acc,x,i,k) => (acc[k=x[1].toLowerCase()] && (acc[k][1]=x), acc), 
    // create map of value as keys on parsedCodedParams
    Object.entries(parsedCodedParams).reduce((acc,x,i)=>(acc[x[1].toLowerCase()]=[i,x],acc), {})
  )
))
))
);