javascript判断数组内每个成员是否完全相同,相同就返回true

业务需求

在脚本开发中,有这样的一个数组:

[{
    "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

解释

  1. 函数定义:定义一个名为 areAllObjectsEqual 的函数,接受一个数组 arr 作为参数。
  2. 边界条件:如果数组长度小于等于1,则直接返回 true,因为只有一个元素或没有元素时,所有对象都相同。
  3. 获取第一个对象的键和值:使用 Object.keysObject.values 获取第一个对象的键和值。
  4. 遍历数组:从第二个对象开始遍历数组,逐个检查每个对象的键和值是否与第一个对象相同。
  5. 键和值比较:使用 JSON.stringify 将键和值转换为字符串,然后进行比较。如果不同,则返回 false
  6. 返回结果:如果所有对象都相同,则返回 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

企业级大数据智能营销管理系统

了解详情