【问题标题】:javascript copy object value from "schema" objectjavascript从“模式”对象复制对象值
【发布时间】:2015-09-21 14:01:36
【问题描述】:

情况就是这样。我得到了一个包含大量信息的对象,例如

var a = {
  one:"foo",
  two:"bar"
}

现在我想提供和其他对象包含的指定键。例如

var schema = {
  two:""
}

然后根据模式的键创建一个新对象

在这里,我想使用 lodash / moutjs 或任何 lib

对不起英语不好

【问题讨论】:

  • 据我了解:schema.two = a.two

标签: javascript object lodash


【解决方案1】:

使用 lodash,您可以 _.pick() 架构 _.keys() 来自 originalObj(您命名为 a):

const originalObj = { one: "foo", two: "bar" }
const schema = { two: "" }

const result = _.pick(originalObj, _.keys(schema))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

如果你想要纯JS,可以reduce架构Object.keys()

const originalObj = { one: "foo", two: "bar" }
const schema = { two: "" }

const result = Object.keys(schema)
  .reduce((obj, key) => 
    originalObj.hasOwnProperty(key) ? { ...obj, [key]: originalObj[key] } : obj
  , {})

console.log(result)

【讨论】:

    【解决方案2】:

    你不需要一个库来完成一个简单的操作。这是一个工作代码:

    var copyObject = function(origin, keys) {
      var destination = {};
      for (var i = keys.length - 1; i >= 0; i--) {
        if(origin.hasOwnProperty(keys[i])) {
          destination[keys[i]] = origin[keys[i]];
        }
      };
      return destination;
    };
    
    var a = {
      one:"foo",
      two:"bar"
    };
    
    var schema = copyObject(a, ['two']);
    

    【讨论】:

      【解决方案3】:

      我不确定我是否正确理解了您。但是,例如,您可以在underscore 中使用pick

      var a = {
          one:"foo",
          two:"bar"
      }
      var schema = _.pick(a, "two"); // returns {two: "foo")
      

      注意,这也适用于lodash

      【讨论】:

        【解决方案4】:
        var copyObject = function(origin, keys) {
          var destination = {};
          for (var i = keys.length - 1; i >= 0; i--) {
            if(origin.hasOwnProperty(keys[i])) {
              destination[keys[i]] = origin[keys[i]];
            }
          };
          return destination;
        };
        
        var a = {
          one:"foo",
          two:"bar"
        };
        
        var schema = copyObject(a, ['two']);
        

        【讨论】:

        • 虽然这段代码可以回答这个问题,但最好在不介绍其他代码的情况下解释它是如何解决问题的,以及为什么要使用它。从长远来看,纯代码的答案没有用处。
        猜你喜欢
        • 2014-01-10
        • 2012-04-25
        • 2011-02-25
        • 2013-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多