Object.keys =用于循环

时间:2019-12-07 14:51:58

标签: javascript

我正在构建一个使用localstorage来输出表的动态表,我在线找到了一些代码,现在我也试图找出每一行

我很难描述这段代码,我的主要问题是了解Object.key方法的作用(我在桌子上有什么功效),这仅仅是oof循环的另一种形式吗?我也很难弄清楚data.foreach(function(object)行对表的作用。

//Employee Database "Localstorage"
if(localStorage.getItem("Employee") == null) {
    var employeeList = [];
    employeeList.push (new Employee("Simon", "Male", "HR", 1999, "SM1@cbs.dk"));
    employeeList.push (new Employee("Mads", "Male","IT", 1999,  "MS@cbs.dk"));
    employeeList.push (new Employee("Jessica", "Female", "Sales",1998, "JT@cbs.dk"));
    employeeList.push (new Employee("Benjamin", "Male","IT", 1997, "BN@cbs.dk"));

    var employeeListString = JSON.stringify(employeeList);
    localStorage.setItem("Employee", employeeListString);
    document.querySelector("#employees").appendChild(buildTable(employeeList));
} else {
    var employeeList = JSON.parse(localStorage.getItem("Employee"));
}

function buildTable(data) {
    // creates variable "table"
    let table = document.createElement("table");

        // Create table head and body
        table.appendChild(document.createElement("thead"));
        table.appendChild(document.createElement("tbody"));

        let fields = Object.keys(data[0]);
        let headRow = document.createElement("tr");
        fields.forEach(function (field) {
            let headCell = document.createElement("th");
            headCell.textContent = field;
            headRow.appendChild(headCell);
        });
        table.querySelector("thead").appendChild(headRow);
        data.forEach(function (object) {
            let row = document.createElement("tr");
            fields.forEach(function (field) {
                let cell = document.createElement("td");
                cell.textContent = object[field];
                if (typeof object[field] == "number") {
                    cell.style.textAlign = "left";
                }
                row.appendChild(cell);
            });
            table.querySelector("tbody").appendChild(row);
        });
        return table;

    }

document.querySelector("#employees").appendChild(buildTable(employeeList));

2 个答案:

答案 0 :(得分:1)

MDN网站上有大量信息,您可以找到这些问题的答案;我强烈建议使用它。

Object.keys

  

Object.keys()方法返回给定对象自己的可枚举属性名称的数组,其顺序与我们在普通循环中获得的顺序相同。

Array.prototype.forEach

  

forEach()方法为每个数组元素执行一次提供的函数。

是的,这是一种不同的循环方式。 Much has been written关于它们之间的差异以及何时可以选择彼此之间的差异,它们做得比我好得多。 TL; DR和过于简化的方式,是可读性,样式与性能的对比。

答案 1 :(得分:0)

假设数据[0]包含一个类似对象

const myDataAt0 = {
  x:5,
  y:10
};

console.log(Object.keys(myDataAt0));

myDataAt0['z'] = 15

console.log(Object.keys(myDataAt0));

第一个console.log表达式将为您提供两个键x和y

第二个将包含z,这是因为所有的javascript属性都是简化的名称/值对。