繁体   English   中英

将对象值从一个对象映射到另一个

[英]Mapping object values from one object to another

我有一个看起来像这样的语言环境对象

 {
    hello.title: {
     en: "Hi",
     sv: "Hej"
    },
    hello.text: {
     en: "Hur mår du?",
     sv: "How are you?"
    },
}

   function mapToNewObj(locale, obj) {


    // Here I want to return a new object that looks like this
        let's say the locale is "sv"

       return {
        hello.title: Hej,
        hello.text: 'Hur mår du?'
      }
}

我想创建一个新对象,其中的键是例如“ hello.title”,值是作为第一个参数传入的语言环境的字符串。

我该怎么办?

return {
     'hello.title': obj['hello.title'][locale],
     'hello.text': obj['hello.text'][locale]
}

或通过循环

result = {}
for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    result[key] =  obj[key][locale]
  }
}
return result

 let input = { 'hello.title': { 'en': "Hi", 'sv': "Hej" }, 'hello.text': { 'sv': "Hur mår du?", 'en': "How are you?" }, }; function mapToNewObj(locale, obj) { return { 'hello.title': input['hello.title'][locale], 'hello.text': input['hello.text'][locale] } } console.log(mapToNewObj('sv', input)); 

使用通用方法,您可以

var Language = {
    "hello.title": {
     en: "Hi",
     sv: "Hej"
    },
    "hello.text": {
     en: "Hur mår du?",
     sv: "How are you?"
    },
}
;

// fn receives (value, key), returns a new value for key.
const mapKeys = (fn) => obj => Object.entries(obj)
  .reduce((res, [k, v]) => ({...res, [k]: fn.apply(null, [v, k])}), {});

const get = (key) => obj => obj[key];

console.log(mapKeys(get("sv"))(Language));

mapKeys采用函数fn并返回采用对象的新函数。 它返回形状相同但值由fn产生的对象。 这里的fn只是get ,它只是选择对象内的给定字段。

你的意思是这样的吗?

var Language = {
  en: {
    title: 'hey',
    text: 'Hur mår du?',
  },
  sv: {
    title: 'hej',
    text: 'How are you?',
  },
};

//  @param {string} locale The locale language return as "sv" or "en"

function returnLanguageMessage(locale) {
  return {
    Language[locale].title,
    Language[locale].text
  };
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM