繁体   English   中英

如何更改对象内部的数组

[英]How to alter array inside an object

我有这个JSON

{
    "Entries": [{
        "JobId": 7322,
        "DayOfTheWeek": "Wednesday",
        "Punchouts": ["2016-05-05T09:50:00", "2016-05-05T12:20:00"],
        "PunchIns": ["2016-05-05T10:10:00", "2016-05-05T12:40:00"]
    }, {
        "JobId": 7322,
        "DayOfTheWeek": "Thursday",
        "Punchouts": ["2016-05-05T09:50:00"],
        "PunchIns": ["2016-05-05T09:40:00"]
    }]
}

我将其更改为

{
    "Entries": [{
        "JobId": 7322,
        "DayOfTheWeek": "Wednesday",
        "Punchout1": "2016-05-05T09:50:00",
        "Punchout2": "2016-05-05T12:20:00",
        "PunchIn1": "2016-05-05T10:10:00",
        "PunchIn2": "2016-05-05T12:40:00"
    }, {
        "JobId": 7322,
        "DayOfTheWeek": "Thursday",
        "Punchout1": "2016-05-05T09:50:00",
        "Punchout2": "",
        "PunchIn1": "2016-05-05T09:40:00"
        "PunchIn2": "",
    }]
}

我想浓缩一下数组。 该数组的最大长度=2。即使长度为0/1,该数组对于PunchOut1 / PunchOut2PunchIn1 / PunchIn2也应具有空字符串

这样实现。

for (var i = 0; i < data.Entries.length; i++) {
    var entry = data.Entries[i];
    if (entry["Punchouts"].length == 0) {
        entry["PunchOut1"] = "";
        entry["PunchOut2"] = "";
    }
    if (entry["Punchouts"].length == 1) {
        entry["PunchOut1"] = entry["Punchouts"][0];
        entry["PunchOut2"] = "";
    }
    if (entry["Punchouts"].length == 2) {
        console.log("in");
        entry["PunchOut1"] = entry["Punchouts"][0];
        entry["PunchOut2"] = entry["Punchouts"][1];
    }
    delete entry["Punchouts"];
    // do same for PunchIns.
}

小提琴: https : //jsfiddle.net/codeandcloud/rpgx28gy/

什么是更优化(最好是破折号)的方式?

var remappedEntries = _.map(data.Entries, e => ({
    JobId: e.JobId,
    DayOfTheWeek: e.DayOfTheWeek,
    PunchOut1: e.PunchOuts[0] || "",
    PunchOut2: e.PunchOuts[1] || "",
    PunchIn1: e.PunchIns[0] || "",
    PunchIn2: e.PunchIns[1] || "",
}));

这使用lodash的映射,该映射迭代每个值,并为您提供iteratee函数,您可以使用该函数将条目重新映射到另一个对象。 请注意,您根本不需要使用lodash,可以使用Array.prototype.map函数,假设您打算支持的浏览器也支持。 您还可以使用垫片。

如果要获取完全相同的对象而不是获取副本,则可以使用_.forEach ,或者继续使用map并丢弃先前的对象。 真的取决于您的情况。

我还使用了箭头函数,使它更简单,从每个“ e”到要返回的对象。 或者,这可以是带有一个参数的命名函数或匿名函数。

对于每次打孔,我都利用了即使数组中没有对象的情况也可以检查的数组。 在这种情况下,它将返回未定义。 对于这些,我们通过使用条件或将它们默认为空字符串,因为undefined被认为是“ falsy”,因此表达式将返回空字符串。 如果它有一个值,那就用那个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM