2017-03-11 28 views
0

我想我已經看到了這樣的jQuery功能,但無法找到它。

var x = {a:1, b:2}; 
var y = {a:5,  c:3}; 

var z = $.extend({}, x, y); // {a: 5, b: 2, c: 3} 

// want a similar jquery function which returns {a: 5, b: 2} 
// that is, returns only attributes which x has (a,b), but adds no new attributes (c) 
+0

......那麼什麼是你的問題? –

+0

有沒有類似的jquery函數返回'{a:5,b:2}'? –

+0

使用[Object.defineProperty](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)在每個屬性上設置enumerable爲false,並在其他屬性上設置true。然後,使用[Object.assign](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)來合併它們。 – Anson

回答

0

編寫自己的方法在這裏可能會更容易。

去到Y的所有道具和覆蓋X

for (var yItem in Y) { 
    if (X.hasOwnProperty(yItem)) { 
    X[yItem] = Y[yItem]; 
    } 
} 

var X = {a:1, b:2}; 
 
var Y = {a:5,  c:3}; 
 
for (var yItem in Y) { 
 
    if (X.hasOwnProperty(yItem)) { 
 
    X[yItem] = Y[yItem]; 
 
    } 
 
} 
 
alert(JSON.stringify(X));

0

只需共享使用Object.assign()Object.defineProperty另一種解決方案。

var x = {a:1, b:2 }; 
 
var y = {a:5,  c:3, d:5}; 
 

 
Object.leftJoin = function(leftObj, rightObj) { 
 
    var acceptKeyList = Object.keys(leftObj); 
 
    var returnObj = {}; 
 
    
 
    for(var key of Object.keys(rightObj)) { 
 
    if(acceptKeyList.indexOf(key) < 0) { 
 
     Object.defineProperty(rightObj, key, { 
 
     enumerable: false 
 
     }); 
 
    } 
 
    } 
 
    return Object.assign(returnObj, leftObj, rightObj); 
 
} 
 

 
console.log(Object.leftJoin(x, y));