2017-06-16 125 views
0

我有一個對象數組。一個典型的物體看起來像:循環遍歷對象並找到指定的屬性

{ 
    id: x 
    name: y 
    employeeInfo: { 
    employeeNumber: x 
    startDate: x 
    } 
    salary: x 
} 

現在我試圖通過它循環,並獲得名稱,employeeNumber和工資。

我列變量,在循環中使用,方法是:

public columns: Array<any> = [ 
    {title: 'id', name: 'id'}, 
    {title: 'employeeInfo.employeeNumber', name: 'employeeInfo.employeeNumber'}, 
    {title: 'salary', name: 'salary'}] 

我試圖用循環

item[column.name] 

但當然,這將導致項目['emplyeeInfo。 employeeNumber'],這會導致未定義的。

有人可以幫忙嗎?

+0

你從這個要輸出什麼? – Arg0n

+0

HTML模板的輸出需要放在一張表中,id,employeeNumber和salary爲列(按此順序) – Rachelle

回答

1

您可以分割列名和減少,如:

column.name.split('.').reduce((res, part) => res[part], item) 

split返回一個數組(在本例['employeeInfo', 'employeeNumber']),以便我們reduce使用item作爲initialValue數組。

reduce()方法應用於對一個儲液器的功能和陣列中的每個元件 (從左到右),以將其降低到單個 值。

+0

hmm我對這種方法並不熟悉,您能解釋一下嗎? – Rachelle

0

難道你不能只是解析/拆分點上的名稱和每個部分,你得到的對象,獲取其屬性,並重申有下一個屬性提取?

1

事情是這樣的:

var employees = [ 
 
    { 
 
    id: 1, 
 
    name: 'Charlie', 
 
    employeeInfo: { 
 
     employeeNumber: 123, 
 
     startDate: '2017-01-23' 
 
    }, 
 
    salary: 2500 
 
    }, 
 
    { 
 
    id: 2, 
 
    name: 'John', 
 
    employeeInfo: { 
 
     employeeNumber: 456, 
 
     startDate: '2017-02-26' 
 
    }, 
 
    salary: 3500 
 
    } 
 
]; 
 

 
var columns = [ 
 
    {title: 'id', name: 'id'}, 
 
    {title: 'employeeInfo.employeeNumber', name: 'employeeInfo.employeeNumber'}, 
 
    {title: 'salary', name: 'salary'} 
 
]; 
 
    
 
function buildTable() { 
 
    var table = $("<table>"); 
 
    var header = $("<tr>"); 
 
    for(var i = 0; i < columns.length; i++) { 
 
    header.append("<th>" + columns[i].title + "</th>"); 
 
    } 
 
    table.append(header); 
 
    for(var i = 0; i < employees.length; i++) { 
 
    var employee = employees[i]; 
 
    var row = $("<tr>"); 
 
    for(var y = 0; y < columns.length; y++) { 
 
     var properties = columns[y].name.split('.'); 
 
     var value = employee; 
 
     for(var x = 0; x < properties.length; x++) { 
 
     value = value[properties[x]]; 
 
     } 
 
     row.append("<td>" + value + "</td>"); 
 
    } 
 
    table.append(row); 
 
    } 
 
    $("#result").append(table); 
 
} 
 

 
buildTable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="result"></div>

0

我結束了使用 「簡化」 的做法。即通過數組過濾,抓住我需要的東西,把它放在一個新的對象中,把它放在一個臨時數組中,最後用簡單的數組替換複雜的數組。

0

試試這個:

var myObject = { 
    id: "x", 
    name: "y", 
    employeeInfo: { 
    employeeNumber: "inner employeeNumber", 
    startDate: "inner date", 
    }, 
    salary: "x" 
} 

for(var id in myObject) { 
    if(typeof myObject[id] === "object") { 
     for(var innerId in myObject[id]){ 
     console.log(innerId + ": " + myObject[id][innerId]); 
     } 
    } else { 
    console.log(id + " " + myObject[id]); 
    } 
}