我有一个对象数组。典型的对象如下:
{
id: x
name: y
employeeInfo: {
employeeNumber: x
startDate: x
}
salary: x
}
现在我正在尝试遍历它并获取名称,employeeNumber和salary。
要在循环中使用的列变量是:
public columns: Array<any> = [
{title: 'id', name: 'id'},
{title: 'employeeInfo.employeeNumber', name: 'employeeInfo.employeeNumber'},
{title: 'salary', name: 'salary'}]
我正试图用
循环item[column.name]
但当然这会导致item ['emplyeeInfo.employeeNumber'],这将导致未定义。
有人可以帮忙吗?
答案 0 :(得分:1)
您可以拆分列名称并缩小,例如:
column.name.split('.').reduce((res, part) => res[part], item)
split
会返回一个数组(在我们的案例中为['employeeInfo', 'employeeNumber']
),因此我们可以使用item
作为initialValue
reduce
该数组。
reduce()
方法对累加器和每个应用函数 数组中的元素(从左到右)将其缩小为单个元素 值。
答案 1 :(得分: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();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="result"></div>
&#13;
答案 2 :(得分:0)
你不能解析/拆分点上的名称,对于每个部分,你得到对象,获取它的属性并重复,同时有下一个要获取的属性?
答案 3 :(得分:0)
我最终使用&#34;简化&#34;做法。即过滤数组,抓住我需要的东西,把它放在一个新的对象中,把它放在一个临时数组中,最后用简单的数组替换复杂的数组。
答案 4 :(得分: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]);
}
}