业务需求
在脚本开发中,有这样的一个数组:
[{
"x": "0.50000",
"y": "0.70278",
"text": "评价并收下金币",
"type": "ocrText"
}, {
"x": "0.50000",
"y": "0.70278",
"text": "评价并收下金币",
"type": "ocrText"
}, {
"x": 0.9027777910232544,
"y": 0.2252604141831398,
"text": "aweme悬浮红包",
"type": "imgOrColor"
}, {
"x": 0.9027777910232544,
"y": 0.2252604141831398,
"text": "aweme悬浮红包",
"type": "imgOrColor"
}, {
"x": 0.9027777910232544,
"y": 0.2252604141831398,
"text": "aweme悬浮红包",
"type": "imgOrColor"
}]
判断数组内每个成员是否完全相同,相同就返回true。
方法一
在JavaScript中,创建一个函数来比较数组中的每个对象是否完全相同。
以下是一个示例函数,它接受一个数组作为参数,并返回一个布尔值,表示数组中的所有元素是否完全相同:
/**
* @author 飞云
* @wechat imfeiyun
* @link http://www.feiyunjs.com
*/
function areAllElementsEqual(array) {
// 如果数组长度小于2,则认为所有元素都是相同的(因为只有一个元素或没有元素)
if (array.length < 2) {
return false;
}
// 取数组的第一个元素作为参照
const firstElement = array[0];
// 遍历数组的其余元素
for (let i = 1; i < array.length; i++) {
// 比较当前元素和第一个元素
if (JSON.stringify(firstElement) !== JSON.stringify(array[i])) {
// 如果发现任何不同,返回false
return false;
}
}
// 如果所有元素都相同,返回true
return true;
}
// 测试数组
const testArray = [
{ "x": "0.50000", "y": "0.70278", "text": "评价并收下金币", "type": "ocrText" },
{ "x": "0.50000", "y": "0.70278", "text": "评价并收下金币", "type": "ocrText" },
{ "x": 0.9027777910232544, "y": 0.2252604141831398, "text": "aweme悬浮红包", "type": "imgOrColor" },
{ "x": 0.9027777910232544, "y": 0.2252604141831398, "text": "aweme悬浮红包", "type": "imgOrColor" },
{ "x": 0.9027777910232544, "y": 0.2252604141831398, "text": "aweme悬浮红包", "type": "imgOrColor" }
];
// 调用函数并打印结果
console.log(areAllElementsEqual(testArray)); // 应该输出 false,因为数组中存在不同的元素
方法二
使用 JavaScript 编写一个函数来判断数组中的所有对象是否完全相同。
以下是另一种方法,并附有详细注释:
/**
* 判断数组中的所有对象是否完全相同
* @param {Array} arr - 要判断的数组
* @returns {boolean} - 如果所有对象完全相同返回 true,否则返回 false
* @author 飞云
* @wechat imfeiyun
* @link http://www.feiyunjs.com
*/
function areAllObjectsEqual(arr) {
// 如果数组为空或只有一个元素,则直接返回 true
if (arr.length <= 1) {
return false;
}
// 获取第一个对象的属性和值
const firstObj = arr[0];
const firstObjKeys = Object.keys(firstObj);
const firstObjValues = Object.values(firstObj);
// 遍历数组中的每个对象
for (let i = 1; i < arr.length; i++) {
const currentObj = arr[i];
const currentObjKeys = Object.keys(currentObj);
const currentObjValues = Object.values(currentObj);
// 检查当前对象的键是否与第一个对象的键相同
if (JSON.stringify(currentObjKeys) !== JSON.stringify(firstObjKeys)) {
return false;
}
// 检查当前对象的值是否与第一个对象的值相同
if (JSON.stringify(currentObjValues) !== JSON.stringify(firstObjValues)) {
return false;
}
}
// 如果所有对象都相同,则返回 true
return true;
}
// 示例数组
const arr = [
{ "x": "0.09861", "y": "0.96875" },
{ "x": "0.09861", "y": "0.96875" },
{ "x": "0.09861", "y": "0.96875" }
];
// 调用函数并输出结果
console.log(areAllObjectsEqual(arr)); // 输出: true
解释
- 函数定义:定义一个名为
areAllObjectsEqual
的函数,接受一个数组arr
作为参数。 - 边界条件:如果数组长度小于等于1,则直接返回
true
,因为只有一个元素或没有元素时,所有对象都相同。 - 获取第一个对象的键和值:使用
Object.keys
和Object.values
获取第一个对象的键和值。 - 遍历数组:从第二个对象开始遍历数组,逐个检查每个对象的键和值是否与第一个对象相同。
- 键和值比较:使用
JSON.stringify
将键和值转换为字符串,然后进行比较。如果不同,则返回false
。 - 返回结果:如果所有对象都相同,则返回
true
。
这个函数可以有效地判断数组中的所有对象是否完全相同。
注意
两种方法都使用JSON.stringify
来比较对象的字符串,这适用于对象属性值都是可序列化的值。如果对象中包含函数、undefined、循环引用或其他非可序列化值,则此方法可能不适用。
此外,JSON.stringify
对数值的精度有一定的限制,可能在比较浮点数时出现精度问题。如果需要处理这些特殊情况,你可能需要编写更复杂的比较逻辑。
字符串转换
将浮点型数据,转换为字符串,四舍五入保留5位:
let number = 0.9027777910232544;
let roundedString = number.toFixed(5); // 四舍五入到五位小数
AiWork简介
AIWork是一款安卓和IOS手机的自动化测试开发引擎,采用免root技术,自研IDE代码编辑器,自研图色引擎2.0,自研agent adb代理模式,自研hid硬件自动化,脚本代码采用javascript脚本代码(rhino引擎),提供了众多的工具,方便自动生成js代码。
AiWork开发文档
在官方文档的基础上,进行重新排版和优化。
一个优雅的文档,对于开发体验的提升,是效果显著的。
永久域名:aiwork.wiki
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » javascript判断数组内每个成员是否完全相同,相同就返回true
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » javascript判断数组内每个成员是否完全相同,相同就返回true