簡體   English   中英

檢查變量,如果為false,則創建對象

[英]Check for variable, if false, create object

我有一個帶有時間值(以毫秒為單位)的嵌套數組。 我想創建一個對象,以防數組沒有該時間值的條目。 現在我的代碼是這樣的:

var start = data[0].nDate;  // time in milliseconds
var end = data[data.length-1].nDate;  // time in milliseconds

var nestedData = d3.nest()
    .key(function (d){ return d.zone}) // id
    .key(function(d){return d.nDate})  // time in milliseconds
    .rollup(function(v){return {
        density: v[0].density,
        nDate: v[0].nDate,
        zone: v[0].zone,
        type: "zone"
    }})
    .sortKeys(d3.ascending)
    .sortValues(function(a,b){return a.date - b.date})
    .entries(data);

for (var i=start;i<end; i++){

    nestedData .forEach(function(b,j){
        var oneZone = +b.values[j].key; // time in milliseconds
        var o = {
            type: "nozone",
            zone: +b.key,  // id
            nDate: i,
            density: 0,
        };

        if(+(oneZone) != i){
            noZone.push(o)
        }
    })
}

//push calculations into a new array
nestedZones.forEach(function(d,i){
    var oneZone = d.values;
    for (var b=0; b<oneZone.length;b++){
        var timeZone = (oneZone[b].value);
        densityByZone.push(timeZone);
    }

});

noZone.forEach(function(d){densityByZone.push(d)});

目前,該條件不起作用。 有時,它為已經具有對象的時間創建條目。

現在,您的代碼正在使用嵌套循環,您將為已經具有該“時間”的對象創建條目。 如果您以這種方式在for循環內使用forEach則這是預期的行為。

相反,我建議您創建一個包含所有“時間”的數組...

var nDateArray = d3.range(start, end + 1, 1);

...並使用類似這樣的函數來填充noZone

nestedData.forEach(function(e) {
    nDateArray.filter(function(f) {
        return e.values.map(function(g) {
            return +g.key
        }).indexOf(f) === -1;
    }).forEach(function(h) {
        noZone.push({
            type: "nozone",
            zone: +e.key, // id
            nDate: h,
            density: 0,
        })
    })
})

這是一個演示,其中包含您在評論中分享的那個小數組:

 var data = [{ date: "Sun Mar 26 2017 16:30:00", density: 0.04, nDate: 1656178, surface: 8000, zone: 99 }, { date: "Sun Mar 26 2017 17:00:00", density: 0.02, nDate: 1656180, surface: 2550, zone: 99 }]; var noZone = []; var start = data[0].nDate; // time in milliseconds var end = data[data.length - 1].nDate; // time in milliseconds var nDateArray = d3.range(start, end + 1, 1); var nestedData = d3.nest() .key(function(d) { return d.zone }) // id .key(function(d) { return d.nDate }) // time in milliseconds .rollup(function(v) { return { density: v[0].density, nDate: v[0].nDate, zone: v[0].zone, type: "zone" } }) .sortKeys(d3.ascending) .sortValues(function(a, b) { return a.date - b.date }) .entries(data); nestedData.forEach(function(e) { nDateArray.filter(function(f) { return e.values.map(function(g) { return +g.key }).indexOf(f) === -1; }).forEach(function(h) { noZone.push({ type: "nozone", zone: +e.key, // id nDate: h, density: 0, }) }) }) console.log(noZone) 
 <script src="https://d3js.org/d3.v4.min.js"></script> 

暫無
暫無

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

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