2017-01-20 47 views
0

使用內置的lodash函數,是否可以傳遞一個對象和一個鍵列表,並將鍵/值對從對象中移除並放入一個返回的新對象中。示例:lodash本地可以將一個對象的列表從一個對象拖入一個新的對象嗎?

var obj = {a: 1, b: 2, c: 3}; 
pluck(obj, ['a', 'b']) // returns {a: 1, b: 2} 
console.log(obj) // {c: 3} 

其中pluck被一個或多個lodash函數替換。

+1

您確實需要從源對象中刪除*屬性嗎?這是一個有點奇怪的要求。 –

回答

0

我不認爲lodash有什麼內置的。你可以這樣做很輕鬆地只是用JavaScript原生功能,但:

var obj = {a: 1, b: 2, c: 3}; 
 
console.log(['a', 'b'].reduce(function(newObj, name) { 
 
    newObj[name] = obj[name]; 
 
    delete obj[name]; 
 
    return newObj; 
 
}, {}));   // {a: 1, b: 2} 
 
console.log(obj) // {c: 3}

對於一些更lodash-Y,你可以結合_.pick_.omit,但你可以創建一個新對象而不是從現有的(這可能是更好反正)刪除特性:

var obj = {a: 1, b: 2, c: 3}; 
 
console.log(_.pick(obj, ['a', 'b'])); // {a: 1, b: 2} 
 
obj = _.omit(obj, ['a', 'b']); 
 
console.log(obj) // {c: 3}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>


的時間沒關係,但只是作爲一個僅供參考,當你在對象上使用 delete,對一些JavaScript引擎,把對象變成一個未優化的「字典」模式,後續財產

99.99999%查找速度比優化對象慢得多。 (添加屬性的對象並沒有這樣做,只是刪除它們。)此外,通常也沒關係,但是......

1

是使用omitpick

obj = _.pick(obj, ['a', 'b']); // { a: 1, b: 2 } 

對於新對象:

var newobj = _.omit(obj, ['a', 'b']); // { c: 3 } 
+0

'omit'只是OP要求的一半。 –

+0

另一半是什麼? –

+0

從問題文本:*「...並放入一個返回的新對象。」*(它也顯示在代碼中的註釋中)。這就是爲什麼我在我的答案中有'pick' +'omit'的原因。 –

相關問題