2

オブジェクトがあるとします:

obj =
  foo: 'foo'
  bar: 'bar'
  // ... and lots of other stuff ...
  // ... these values vary, and are not actually hard coded ...

その属性のサブセットのみを含むそのオブジェクトのコピーを作成したいと思います。

obj2 =
  foo: obj.foo
  bar: obj.bar
  // *doesn't* copy any other attributes from `obj`

これを行うためのより慣用的な方法はありますか?何かのようなもの

obj2 = copyOnly obj, ['foo', 'bar']

確かに、copyOnly自分で書くこともできますが、これを行うための慣用的な方法を探しています。自家製の方法ではありません。このシナリオでお勧めできるイディオムはありますか?

4

3 に答える 3

2

これを自分で書くよりも慣用的だとは言いませんが、lodash(次世代underscore)にはpick機能があります

http://lodash.com/docs#pick Creates a shallow clone of object composed of the specified properties. Property names may be specified as individual arguments or as arrays of property names.

もありますomit

__ = require 'lodash'
__.pick(obj,['foo','bar'])

しかし、多くのコーヒーイディオムで同等のものを書くのも簡単です

pick = (obj, keys, obj2={}) ->
  obj2[key] = value for own key, value of obj when key in keys
  obj2

または、キーをループしたい場合

pick = (obj, keys, obj2={}) ->
  obj2[key] = obj[key] for key in keys when obj[key]?
  obj2
于 2013-10-02T23:27:26.607 に答える
0

できるよ

var obj = {
'property' : 'value',
'property_1' : 'value_1',
'property_2' : 'value_2'
};
function clone(srcObject, propertiesArray) {
    var objcopy = {};
    for(propperty in propertiesArray) {
        objcopy [propertiesArray[propperty]] = srcObject[propertiesArray[propperty]];
    }
    return objcopy;
}
var myClone = clone(obj, ['property', 'property_2']);
于 2013-10-02T20:50:08.160 に答える