首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将对象值更改为匹配的映射值

将对象值更改为匹配的映射值
EN

Stack Overflow用户
提问于 2020-08-04 13:39:03
回答 4查看 34关注 0票数 2

我有一个对象,看起来像这样

代码语言:javascript
运行
复制
const companyObj = 
    { 
      Advice_Charge: "B. In service / product cost"
      Org_Advisory: "B. 1-3"
      Org_Developers: "A. None"
      Org_MainCategory: "Business services and sales"
      Org_Name: "A1 Orchard Spreading"
      Org_Size_Facing: "B. 1-3"
      Org_SubCategory: "Contractor - Harvesting and cultivation"
    }

我有另一个对象,看起来像这样

代码语言:javascript
运行
复制
const sizeMap = {
          'A. None': '11-30',
          'B. 1-3': '1-3',
          'C. 4-10': '4-10',
          'D. 11 - 30': '11-30',
          'E. 31 - 100': '31-100',
          'F. 100 - 300': '100-300',
          'G. 301 - 1000': '301-1000',
          'H. 1,000+': '1000 +',
          'J. ???': '1-3',
        }

我正在尝试使用sizeMap更改对象内部的一个属性

我希望companyObj看起来像这样

代码语言:javascript
运行
复制
{Org_Size_Facing: '1-3'} // I don't really care about the other properties at this point..

基本上,如果companyObj.Org_Size_FacingsizeMap返回任何字段,那么sizeMap应该返回适当的值

我试过了

代码语言:javascript
运行
复制
console.log(
          'objAsign',
          Object.assign(companyObj.Org_Size_Facing, sizeMap['Org_Size_Facing']),
        )

这太离谱了,但我相信你们已经明白了

将非常感谢你们能提供的任何帮助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-04 14:06:47

您可以遍历companyObj的条目(键、值对),并使用in operator检查该属性是否在sizeMap对象中(请注意,它也在原型链中)。

如果您只需要至少一个属性,那么您可以提前中断。

运行示例

代码语言:javascript
运行
复制
const companyObj = {
  Advice_Charge: "B. In service / product cost",
  Org_Advisory: "B. 1-3",
  Org_Developers: "A. None",
  Org_MainCategory: "Business services and sales",
  Org_Name: "A1 Orchard Spreading",
  Org_Size_Facing: "B. 1-3",
  Org_SubCategory: "Contractor - Harvesting and cultivation",
}


const sizeMap = {
  'A. None': '11-30',
  'B. 1-3': '1-3',
  'C. 4-10': '4-10',
  'D. 11 - 30': '11-30',
  'E. 31 - 100': '31-100',
  'F. 100 - 300': '100-300',
  'G. 301 - 1000': '301-1000',
  'H. 1,000+': '1000 +',
  'J. ???': '1-3',
}

for (const [key, val] of Object.entries(companyObj)) {
  if (val in sizeMap) {
    companyObj[key] = sizeMap[val];
    break; // if we dont need to check other properties
  }
}

console.log(companyObj)

请注意,我们正在修改原始对象,如果需要,我们还可以创建一个新对象。

票数 1
EN

Stack Overflow用户

发布于 2020-08-04 14:09:46

您可以使用for.. in循环来完成此操作

代码语言:javascript
运行
复制
const companyObj = { 
      Advice_Charge: "B. In service / product cost",
      Org_Advisory: "B. 1-3",
      Org_Developers: "A. None",
      Org_MainCategory: "Business services and sales",
      Org_Name: "A1 Orchard Spreading",
      Org_Size_Facing: "B. 1-3",
      Org_SubCategory: "Contractor - Harvesting and cultivation"
}
const sizeMap = {
       'A. None': '11-30',
       'B. 1-3': '1-3',
       'C. 4-10': '4-10',
       'D. 11 - 30': '11-30',
       'E. 31 - 100': '31-100',
       'F. 100 - 300': '100-300',
       'G. 301 - 1000': '301-1000',
       'H. 1,000+': '1000 +',
       'J. ???': '1-3',
}

for(let key in companyObj) {
   if(companyObj[key] in sizeMap) {
      let val = companyObj[key];
      companyObj[key] = sizeMap[val];
   }
}

console.log(companyObj);

票数 1
EN

Stack Overflow用户

发布于 2020-08-04 13:53:09

如果你想覆盖你的原始对象,你可以这样做:

代码语言:javascript
运行
复制
if(sizeMap.hasOwnProperty(companyObj.Org_Size_Facing)){
    companyObj.Org_Size_Facing = sizeMap[companyObj.Org_Size_Facing]
}

否则,您可以创建一个新对象:

代码语言:javascript
运行
复制
let newObj = {};

if(sizeMap.hasOwnProperty(companyObj.Org_Size_Facing)){
    newObj.Org_Size_Facing = sizeMap[companyObj.Org_Size_Facing]
}

console.log(newObj);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63240845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档