2016-03-08 29 views
0

我在我的JS從陣列切片的對象:敲除JS [對象物體]牽引性能

self.deploysToDevId = ko.computed(function() { 
    var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) { 
    return build.buildType() == 'Deploy to Development'; 
    }, self); 
    var deployToDevID = deployToDev.slice(0,1).id 
    return deployToDevID; 
}); 

該目的是最初從稱爲陣列構建,並且是構建物體。然而,我試圖獲得一個屬性,構建這是一個屬性的構建「ID」,我想能夠存儲這個並將其作爲一個對象返回,但是當我做的數據綁定打印文本[Object對象]

self.getIdOfMostRecentDeploy = ko.computed(function() { 
    var idOfMostRecentDeploy = (self.deploysToDevId().id); 
    return idOfMostRecentDeploy; 
}); 

這應該存儲對象爲 「idOfMostRecentDeploy」 的ID,但它沒有這樣做。

 self.deploysToDevId = ko.computed(function() { 
    var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) { 
     return build.buildType() == 'Deploy to Development'; 
     }, 
     self); 
     var deployToDevID = deployToDev[0]; 
     return deployToDevID; 
}); 

這是我嘗試過的另一種方法,這次嘗試取數組中的第一個對象並將其id分配給一個變量。雖然,我還只是得到[Object對象]

+1

你能展示一個你的deployToDev數據結構的例子嗎? – KWeiss

+0

'.id'也許是'observable'或'computed'?根據輸出結果,這是某種對象。我也在'deploysToDevId'中看到你正在返回一個構建的id屬性(我假設你期望一個字符串?),但是'getIdOfMostRecentDeploy'正在訪問這個計算的'id'屬性。那麼構建ID是否有自己的'id'屬性?我們確實需要查看源數據的結構以提供幫助。 – Jacob

+0

或者'self.builds'包含的例子將有所幫助。 – Jacob

回答

0

,當你這樣做:

self.deploysToDevId = ko.computed(function() { 
    var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) { 
    return build.buildType() == 'Deploy to Development'; 
    }, self); 
    var deployToDevID = deployToDev.slice(0,1).id 
    return deployToDevID; 
}); 

要創建一個計算將包含只是deployToDev對象,我相信是可觀察的id(即是,JavaScript函數,你需要EVAL得到的值)

然後,當您嘗試訪問它使用:

(self.deploysToDevId().id) 

這是回訪基本上沒有什麼,因爲「ID」,你要找的是在計算本身,self.deploysToDevId(),沒有任何內在的id屬性

編輯:

我創造了這個小提琴,可以幫助你:

https://jsfiddle.net/r88zkn11/

在你情況下,唯一的區別是,如果不是有idbuildType作爲字符串對象的對象,它們的功能,所以如果你有使用它們你必須評估他們(使用buildType(),而不是buildType

+0

有沒有什麼辦法可以獲得對象的Id並將其存儲爲變量? –

+0

請看看現在的反應是否足夠好,如果不是,請不要猶豫,再次詢問 – JulioCT

0

當你這樣做:

var deployToDevID = deployToDev.slice(0,1).id; 

你的意思是:長給我一個數組一個元素,並採取陣列的id財產。該陣列沒有id屬性。相反,你應該索引的第一個元素:

var deployToDevID = deployToDev[0].id; 

然後,由於JulioCT注意到,計算將返回id。它沒有id成員,它只是id。

在你的最後一個例子,你拿的第一個元素,但取其id屬性,因此將其命名爲deployToDevID是一種誤導。按照我上面的建議取其id,然後在想要使用該ID的任何地方使用deployToDevID

+0

有沒有什麼辦法可以獲得數組內部的deployToDev對象中的內部id? –

+0

是的,你只需要跟蹤你實際存儲在變量中的內容。在你的最後一個例子中,你調用了變量'deployToDevID',但是你存儲了一個構建元素(它有一個'id'元素)。所以你會爲此做'deployToDevID.id'。 –