Javascript 如何将新对象中字段的值设置为等于数组中字段的最高值?
我有一个包含objectiveDetail对象的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
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[]并进行检查。我不确定我是否理解您的代码