簡體   English   中英

按值過濾JavaScript對象

[英]Filter JavaScript Object by value

我有這個對象數組:

var result = [
{
    appAddress:"127.0.0.1",
    name:"AppServer1",
    dbConnection:""
},
{
    appAdress:"",
    name:"DBServer1",
    dbConnection:"Server=.;Database=master;Integrated Security=SSPI"
}];

現在,我只需要獲取名稱值(到數組中),其中appAddress不為空。 我嘗試了array.filter()$ .map(),但是這些方法似乎都不能滿足我的要求。

這是我嘗試的:

var appServers = $.map(result, function (val, key) {
    return (key == 'appAddress' && val.length > 0) ? key : null;
    });

var appServers = result.filter(function (entry) {
    return entry['displayName'];
    });

首先,您的對象定義是錯誤的。 您需要使用:而不是=

接下來,您可以使用簡單的for循環執行此操作:

var output = [];
for (var i = 0; i < result.length; i++) {
    var item = result[i];
    if (item.appAddress) output.push(item.name);
}

這是一個有效的例子

您可能要做的一件事是

var names = result.filter(
    function (t) {
        return t.appAddress != "";
}).map(
    function (t) {
        return t.name;
});

您可以像這樣使用reduce:

 var result = [ { appAdress: "127.0.0.1", name: "AppServer1", dbConnection: "" }, { appAdress: "", name: "DBServer1", dbConnection: "Server=.;Database=master;Integrated Security=SSPI" }]; var addresses = result.reduce(function (acc, it) { if (it.appAdress) { acc.push(it.name); } return acc; }, []); console.log(addresses); 
 Please check the result in console. 

對於過濾,可以使用Array filtermap方法。 請參見以下示例。

Array.prototype.filter文檔

Array.prototype.map文件

 var result = [{ appAdress: "127.0.0.1", name: "AppServer1", dbConnection: "" }, { appAdress: "", name: "DBServer1", dbConnection: "Server=.;Database=master;Integrated Security=SSPI" }]; // First Solution var out = result.filter(function(obj) { return obj.appAdress; }).map(function(obj) { return obj.name; }) // Second Solution var namesArr = []; result.forEach(function(obj) { if (obj.appAdress) { namesArr.push(obj.name); } }); document.querySelector('#out').innerHTML = JSON.stringify(out, undefined, 4); document.querySelector('#out2').innerHTML = JSON.stringify(namesArr, undefined, 4); 
 First Solution <pre id="out"></pre> <hr/> Second Solution <pre id="out2"></pre> 

您的result數組中定義的對象無效。 對象值寫為name:value對(用冒號分隔)。

嘗試這個:

 var result = [{ appAdress: "127.0.0.1", name: "AppServer1", dbConnection: "" }, { appAdress: "", name: "DBServer1", dbConnection: "Server=.;Database=master;Integrated Security=SSPI" }]; var resultArr = $.map(result, function(val, i) { if (val.appAdress.length > 0) return val.name; }); console.log(resultArr); 
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

JSFiddle上運行,或閱讀有關jQuery.map()的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM