Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery$。每个数组索引-1_Javascript_Jquery - Fatal编程技术网

Javascript jquery$。每个数组索引-1

Javascript jquery$。每个数组索引-1,javascript,jquery,Javascript,Jquery,如何使$。每个对象的索引为-1 因为obj[i-1]。一天不起作用 var签入状态=[{ “起始日期”:“2015-01-08”, “总天数”:“4”, “路线图”:[{ “礼物类型”:“星星”, “数量”:100, “天”:1 }, { “礼物类型”:“星星”, “数量”:500, “天”:3 }, { “礼物类型”:“星星”, “数量”:1000, “天”:10 }, { “礼物类型”:“星星”, “数量”:1200, “天”:20 }, { “礼物类型”:“星星”, “数量”:2200,

如何使$。每个对象的索引为-1

因为obj[i-1]。一天不起作用

var签入状态=[{
“起始日期”:“2015-01-08”,
“总天数”:“4”,
“路线图”:[{
“礼物类型”:“星星”,
“数量”:100,
“天”:1
}, {
“礼物类型”:“星星”,
“数量”:500,
“天”:3
}, {
“礼物类型”:“星星”,
“数量”:1000,
“天”:10
}, {
“礼物类型”:“星星”,
“数量”:1200,
“天”:20
}, {
“礼物类型”:“星星”,
“数量”:2200,
“天”:30
}]           
}];
var checkin_info=checkin_状态[0]。路线图;
$。每个(签入信息、功能(i、obj){
var sum_day=obj[i-1]。day+obj.day;
var中间日=总和日/2;
控制台日志(中天);
});

特殊情况第一个条目,如下所示:

var checkin_status = [{
    "startdate": "2015-01-08",
    "totaldays": "4",
    "roadmap": [{
        "gifttype": "stars",
        "quantity": 100,
        "day": 1
    }, {
        "gifttype": "stars",
        "quantity": 500,
        "day": 3
    }, {
        "gifttype": "stars",
        "quantity": 1000,
        "day": 10
    }, {
        "gifttype": "stars",
        "quantity": 1200,
        "day": 20
    }, {
        "gifttype": "stars",
        "quantity": 2200,
        "day": 30
    }]           
 }];

var checkin_info = checkin_status[0].roadmap;

    $.each(checkin_info, function (i, obj) 
    {

        var sum_day = 0;
        if(i==0) 
        {
                  //this is the first entry, so we can't look back to the previous day.   
                  sum_day = obj.day; 
        }
        else
        {
                   //you were calling obj[i-1] here, which wasn't going to work.
                   //i presume you wanted the previous day here.
                   sum_day = checkin_info[i - 1].day + obj.day;
        }


        var middle_day = sum_day / 2;
        console.log(middle_day);
    });

你根本不需要每个
在这里,你要把一个数组映射到另一个数组,我把它分成下面的两个操作来演示,但不需要。这一切都可以在一张地图上完成:

var签入状态=[{
“起始日期”:“2015-01-08”,
“总天数”:“4”,
“路线图”:[{
“礼物类型”:“星星”,
“数量”:100,
“天”:1
}, {
“礼物类型”:“星星”,
“数量”:500,
“天”:3
}, {
“礼物类型”:“星星”,
“数量”:1000,
“天”:10
}, {
“礼物类型”:“星星”,
“数量”:1200,
“天”:20
}, {
“礼物类型”:“星星”,
“数量”:2200,
“天”:30
}]           
}];
var checkin_info=checkin_状态[0]。路线图;
var result1=checkin_info.slice(1,checkin_info.length).map(函数(e,i){
返回签入信息[i].day+e.day;
});
console.log(result1);//日志[4,13,30,50]
var result2=result1.map(函数(e){
返回e/2;
});

console.log(result2);//日志[2,6.5,15,50]
$。每个日志都不利于性能,因为每个交互都会调用函数。最好在vanilla js中使用for循环

var checkin_status = [
{"startdate":"2015-01-08",
"totaldays":"4",
"roadmap":[
            {"gifttype":"stars","quantity":100,"day":1},
            {"gifttype":"stars","quantity":500,"day":3},
            {"gifttype":"stars","quantity":1000,"day":10},
            {"gifttype":"stars","quantity":1200,"day":20},
            {"gifttype":"stars","quantity":2200,"day":30},
          ]

}];

    var checkin_info = checkin_status[0].roadmap,
        len = checkin_info.length,
        i,
        sum_day = [],
        middle_day = [],
        sum = 0;

    for(i=0; i< (len -1); i++) {
        sum = checkin_info[i].day + checkin_info[i + 1].day;
        sum_day.push(sum);
        middle_day.push(sum/2);
    }
    console.log(sum_day)
    console.log(middle_day)
var签入状态=[
{“开始日期”:“2015-01-08”,
“总天数”:“4”,
“路线图”:[
{“礼物类型”:“星星”,“数量”:100,“天”:1},
{“礼物类型”:“星星”,“数量”:500,“天”:3},
{“礼物类型”:“星星”,“数量”:1000,“天”:10},
{“礼物类型”:“星星”,“数量”:1200,“天”:20},
{“礼物类型”:“星星”,“数量”:2200,“天”:30},
]
}];
var checkin_info=checkin_状态[0]。路线图,
len=签入信息长度,
我
总天数=[],
中天=[],
总和=0;
对于(i=0;i<(len-1);i++){
总和=签入信息[i]。天+签入信息[i+1]。天;
sum_日推送(sum);
中午推送(总和/2);
}
控制台日志(总和日)
console.log(中天)


当它试图访问一个不存在的元素(在你的第一个项目之前没有项目)时,它会在你的第一个项目(“day”:1)上抛出一个错误。
obj[i-1]。day
需要是
签入信息[i-1]。day
并且你需要跳过第一个项目,它才能工作。@Jamiec使用
签入信息[i-1].day
将获取
无法读取未定义的属性“day”
为什么要尝试使用
i
作为
obj
的索引?
obj
参数的值将与
checkin_info[i]
相同。但是
obj
是您正在迭代的当前元素(如
roadmap
中的当前对象),它不能是数组。正如@nnnnnn刚才所说的!在
$中还有其他方法吗?每个
?都注意到了这一点并更改了答案。$。每个循环的行为都不同于正常循环。如果返回true,它将停止处理当前迭代并继续下一个迭代。如果我更改为签入信息[I-1]。第一天的项目将被跳过。我不想第一项被跳过。help@ImHappy修好了。好眼力。此外,如果我们不跳过第一项,我们如何计算一天的中间时间?这没有提到前一天,因此如果我们不跳过第一天,我们就无法进行计算。嘿,这更整洁了。我必须在
$中使用
result2
。每个
@ImHappy-为什么?你会用拖鞋钉钉子吗?正确的工具适合正确的工作(或者,这是家庭作业吗?@ImHappy那么您需要
result2
中所有数字的总和是多少?如果不是,为什么不能在结果数组上迭代呢。这个答案完全符合你在问题中的两个要点中提出的要求——但比你想做的要简洁得多!现在你失去了我——这正是井,它起作用了。但是它背后的理由有点空洞。看,我们发现使用jquery的每个。它的开销非常小,以至于在这样的数据集上几乎看不到它。