Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 如何将新对象中字段的值设置为等于数组中字段的最高值?_Javascript_Arrays - Fatal编程技术网

Javascript 如何将新对象中字段的值设置为等于数组中字段的最高值?

Javascript 如何将新对象中字段的值设置为等于数组中字段的最高值?,javascript,arrays,Javascript,Arrays,我有一个包含objectiveDetail对象的javascript数组 objectiveDetails[] 在这里,我添加了一个新的objectiveDetail: var emptyObjectiveDetail = { "number": formData.objectiveDetails.length +1, // I want to change this ! "text": "", "response": false, "objectiveId": formD

我有一个包含objectiveDetail对象的javascript数组

objectiveDetails[]
在这里,我添加了一个新的objectiveDetail:

var emptyObjectiveDetail = {
  "number": formData.objectiveDetails.length +1, // I want to change this !
  "text": "", 
  "response": false, 
  "objectiveId": formData.objectiveId
};
objectiveDetails.push(emptyObjectiveDetail);
如何使分配给emptyObjectDetail字段的数字等于数组中ObjectedDetail对象当前使用的最大数字

换句话说,如果我有三个ObjectedDetail对象,并且“number”字段设置为1、4和5,那么当我添加一个新对象时,我希望将其添加为数字6,而不是数组的长度+1

我对使用下划线也很感兴趣,我想知道是否有一种很好的方法可以使用下划线和javascript来实现这一点,您可以试试

var emptyObjectiveDetail = {
  "number": objectiveDetails[objectiveDetails.length-1].number + 1, // I want to change this !
  "text": "", 
  "response": false, 
  "objectiveId": formData.objectiveId
};
objectiveDetails.push(emptyObjectiveDetail);
它将使键“number”的值等于最后输入的数字

但是,要真正找到最大值,您必须遍历所有值并找到最大的“数字”。

您可以尝试

var emptyObjectiveDetail = {
  "number": objectiveDetails[objectiveDetails.length-1].number + 1, // I want to change this !
  "text": "", 
  "response": false, 
  "objectiveId": formData.objectiveId
};
objectiveDetails.push(emptyObjectiveDetail);
它将使键“number”的值等于最后输入的数字

但是,要真正找到最大值,您必须遍历所有值并找到最大的“数字”。

这是我的建议:

// create an empty array
var objectiveDetails = [];
// set the current highestNumber to 0
objectiveDetails.highestNumber = 0;
// add a custom method to add an objectiveDetail
objectiveDetails.add = function(objectiveDetail) {
    // if objectiveDetail is not given make an empty object
    objectiveDetail = objectiveDetail ? objectiveDetail : {};
    // if objectiveDetail.number is not given give it highestNumber+1
    if (!objectiveDetail.number) {
        objectiveDetail.number = objectiveDetails.highestNumber + 1;
    }
    // check if highestNumber is still the highest
    if (objectiveDetail.number > objectiveDetails.highestNumber) {
        objectiveDetails.highestNumber = objectiveDetail.number;
    }
    // add objectiveDetail to array
    objectiveDetails.push(objectiveDetail);
}
示例:

var emptyObjectiveDetail = {
  "number": 3,
  "text": "", 
  "response": false, 
  "objectiveId": 412
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "number": 2,
  "text": "", 
  "response": false, 
  "objectiveId": 413
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "text": "", 
  "response": false, 
  "objectiveId": 414
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "number": objectiveDetails.highestNumber+1,
  "text": "", 
  "response": false, 
  "objectiveId": 414
};
objectiveDetails.add(emptyObjectiveDetail);

console.log(objectiveDetails);
我的建议是:

// create an empty array
var objectiveDetails = [];
// set the current highestNumber to 0
objectiveDetails.highestNumber = 0;
// add a custom method to add an objectiveDetail
objectiveDetails.add = function(objectiveDetail) {
    // if objectiveDetail is not given make an empty object
    objectiveDetail = objectiveDetail ? objectiveDetail : {};
    // if objectiveDetail.number is not given give it highestNumber+1
    if (!objectiveDetail.number) {
        objectiveDetail.number = objectiveDetails.highestNumber + 1;
    }
    // check if highestNumber is still the highest
    if (objectiveDetail.number > objectiveDetails.highestNumber) {
        objectiveDetails.highestNumber = objectiveDetail.number;
    }
    // add objectiveDetail to array
    objectiveDetails.push(objectiveDetail);
}
示例:

var emptyObjectiveDetail = {
  "number": 3,
  "text": "", 
  "response": false, 
  "objectiveId": 412
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "number": 2,
  "text": "", 
  "response": false, 
  "objectiveId": 413
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "text": "", 
  "response": false, 
  "objectiveId": 414
};
objectiveDetails.add(emptyObjectiveDetail);

var emptyObjectiveDetail = {
  "number": objectiveDetails.highestNumber+1,
  "text": "", 
  "response": false, 
  "objectiveId": 414
};
objectiveDetails.add(emptyObjectiveDetail);

console.log(objectiveDetails);

如果我正确理解了问题,并且
formData.objectiveDetails
仅包含数值,我认为您可以使用
Math.max
确定最大值:

var emptyObjectiveDetail = {
  "number": Math.max.apply(null,formData.objectiveDetails) + 1,
  // etc.
};

如果我正确理解了问题,并且
formData.objectiveDetails
仅包含数值,我认为您可以使用
Math.max
确定最大值:

var emptyObjectiveDetail = {
  "number": Math.max.apply(null,formData.objectiveDetails) + 1,
  // etc.
};
试试下面的例子

基本思想是使用
.map
函数创建一个仅包含
objectiveDetails
数组的
数值的虚拟一维数组,然后使用
Math.max
查找该虚拟1D数组中的最大值

var maxNum  = Math.max.apply(Math,objectiveDetails.map(function(o){return o.number;}));
var emptyObjectiveDetail = {
    "number": maxNum+1,
  "text": "", 
  "response": false, 
  "objectiveId": 123
};
objectiveDetails.push(emptyObjectiveDetail);
试试下面的例子

基本思想是使用
.map
函数创建一个仅包含
objectiveDetails
数组的
数值的虚拟一维数组,然后使用
Math.max
查找该虚拟1D数组中的最大值

var maxNum  = Math.max.apply(Math,objectiveDetails.map(function(o){return o.number;}));
var emptyObjectiveDetail = {
    "number": maxNum+1,
  "text": "", 
  "response": false, 
  "objectiveId": 123
};
objectiveDetails.push(emptyObjectiveDetail);

除了已经提出的方法外,我相信还有两种方法:

1) (最有效的):将值存储在数字中(可能作为全局值或作为类中的变量)。在添加对象时不断更新它。在添加新对象时,检查此编号并相应地添加对象

优点:计算效率最高。添加新对象时,无需遍历所有对象

2) (优化我相信):好的,这里它使用下划线,我相信它是优化的:D

var maxNum = _.max(objectiveDetails,function(objectiveDetail){return objectiveDetail.number;}); var emptyObjectiveDetail = { "number": maxNum+1, "text": "", "response": false, "objectiveId": 123 }; objectiveDetails.push(emptyObjectiveDetail); var maxNum=uu0.max(objectiveDetails,函数(objectiveDetail){return objectiveDetail.number;}); var emptyObjectiveDetail={ “数字”:maxNum+1, “文本”:“, “回应”:错误, “objectiveId”:123 }; 目标细节。推(清空目标细节); 优点:使用针对此类内容进行了优化的库


希望这能有所帮助:)

除了已经提出的方法外,我相信还有两种方法:

1) (最有效的):将值存储在数字中(可能作为全局值或作为类中的变量)。在添加对象时不断更新它。在添加新对象时,检查此编号并相应地添加对象

优点:计算效率最高。添加新对象时,无需遍历所有对象

2) (优化我相信):好的,这里它使用下划线,我相信它是优化的:D

var maxNum = _.max(objectiveDetails,function(objectiveDetail){return objectiveDetail.number;}); var emptyObjectiveDetail = { "number": maxNum+1, "text": "", "response": false, "objectiveId": 123 }; objectiveDetails.push(emptyObjectiveDetail); var maxNum=uu0.max(objectiveDetails,函数(objectiveDetail){return objectiveDetail.number;}); var emptyObjectiveDetail={ “数字”:maxNum+1, “文本”:“, “回应”:错误, “objectiveId”:123 }; 目标细节。推(清空目标细节); 优点:使用针对此类内容进行了优化的库


希望有帮助:)

是的,我确实需要最大的值,但我不确定迭代所有值的最佳方式。您可以通过添加固定数字5、固定数字4和动态下一步也将有数字5来添加重复项…我不确定“添加重复项”是什么意思。我需要添加新的emptyObjectiveDetails,它们是空的,除了“数字”字段比当前使用的最高值大一个之外。@Alan是的,如果您以前添加了一个固定数字为4的项目,使用此代码您将添加数字5两次。此代码类似于:number=latest+1,但在添加具有固定编号latest+1的项之后,仍然可以添加具有:number=4的对象。这些是离散请求。当一个请求进来时,我需要检查最大的数字是多少,然后用它创建一个新对象。然后,另一个请求出现,我需要再次迭代objectiveDetails[]并检查。是的,我确实需要最大的值,但我不确定迭代所有值的最佳方式。您可以通过添加固定数字5、固定数字4和dynamic next来添加重复项,同时还将添加数字5……我不确定“添加重复项”是什么意思。我需要添加新的emptyObjectiveDetails,它们是空的,除了“数字”字段比当前使用的最高值大一个之外。@Alan是的,如果您以前添加了一个固定数字为4的项目,使用此代码您将添加数字5两次。此代码类似于:number=latest+1,但在添加具有固定编号latest+1的项之后,仍然可以添加具有:number=4的对象。这些是离散请求。当一个请求进来时,我需要检查最大的数字是多少,然后用它创建一个新对象。然后,另一个请求出现了,我需要再次遍历objectiveDetails[]并进行检查。我不确定我是否理解您的代码