比较两个数组是否相同及两个对象是否相同

最近做图片上传时,当修改图片时会用到判断两个数组是否相同。虽然最近没有采取比较两个数组是否相同,但也因此研究了下比较两个数组是否相同的方法,首页在网上查了一下相关资料更多的是用到数组转化为字符串进行比较,代码如下:

const arr1 = [1,2,3];
const arr2 = [1,3,2];
console.log(arr1.sort().toString() == arr2.sort().toString())  // true

上面的方法只能进行简单数组的比较不够全面,所以自己查找总结了下面的方法:

function compareArray(arr1, arr2) {
   let tempArray = Array.from(arr2)
   if (arr1 instanceof Array && arr2 instanceof Array) {
       return arr1.length == arr2.length && arr1.every(item => {
           let delIndex = 0
           let result = false
           if (isNaN(item)) {
               result = tempArray.some((item_2, index) => {
                   if (isNaN(item_2)) {
                       delIndex = index
                       return true
                   }
                   return false
               })
           } else {
               delIndex = tempArray.indexOf(item)
               result = delIndex != -1
           }
           tempArray.splice(delIndex, 1)
           return result
       })
   } else {
       return false
   }
}
const obj = {}
const arr = []
const nan = NaN

const a = [1, 2, 3, obj, arr, nan]
const b = [obj, arr, 3, 2, 1, nan]

console.log('compareArray:', compareArray(a, b))  // compareArray: true

随便也附带总结了判断两个对象是否相同的方法,代码如下:

function compareObj(obj1, obj2) {
    if (obj1 === obj2) {
        return true
    }
    if (! (obj1 instanceof Object) || ! (obj2 instanceof Object)) {
        return false
    }
    if ( obj1.constructor !== obj2.constructor) {
        return false
    }
    for (var p in obj1) {
        if (obj1.hasOwnProperty(p)) {
            if (!obj2.hasOwnProperty(p)) {
                return false
            }
            if (obj1[p] === obj2[p]) {
                continue
            }
            if (typeof obj1[p] !== 'object') {
                return false
            }
        }
    }
    for (var p in obj2) {
        if (obj1.hasOwnProperty(p) && !obj2.hasOwnProperty(p)) {
            return false
        }
    }
    return true

}
const obj = {name: 'dean', age: 18}
const obj2 = {age: 18, name: 'dean'}

console.log('compareObj:', compareObj(obj, obj2)) // compareObj: true
在 3ds Max 的 MaxScript 脚本语言中,数组比较常见的数据结构之一。若需要判断两个数组是否相等”,则需根据具体需求来定义“相等”的含义。 ### 数组引用比较 MaxScript 中的数组对象类型,因此如果直接使用 `==` 运算符进行比较,实际上是在比较两个变量是否引用同一个数组对象。例如: ```maxscript a = #(1, 2, 3) b = a c = #(1, 2, 3) a == b -- true,因为 b 引用的是 a 的地址 a == c -- false,虽然内容相同,但它们是不同的对象[^2] ``` 上述行为与 Java 中的对象比较机制类似,即默认情况下比较的是引用而非值的内容。 ### 内容逐项比较 若要判断两个数组的内容是否完全一致,则需要手动遍历数组元素并逐一比对。可以编写一个函数来实现该功能: ```maxscript fn arraysEqual arr1 arr2 = ( if arr1.count != arr2.count then return false for i in 1 to arr1.count do if arr1[i] != arr2[i] do return false return true ) -- 示例 a = #(1, 2, 3) b = #(1, 2, 3) c = #(1, 2, 4) arraysEqual a b -- true arraysEqual a c -- false ``` 此方法适用于简单数据类型的数组(如整数、浮点数、字符串等),但如果数组中包含嵌套数组或其他复杂对象,则需要递归地进行深度比较。 ### 使用内置函数或插件 在某些版本的 3ds Max 中,可以通过 `isEqualTo` 方法来判断两个数组的内容是否一致,前提是该方法适用于当前的数据类型: ```maxscript a = #(1, 2, 3) b = #(1, 2, 3) a isEqualTo b -- true ``` 此外,如果你使用了第三方脚本库或插件(如 TexTools 插件用于纹理处理[^3]),也可以查看是否有现成的工具函数支持数组比较。 ### 小结 - 使用 `==` 比较的是数组对象的引用。 - 若需比较数组内容,应通过循环逐项对比或使用 `isEqualTo` 方法。 - 对于复杂结构,建议编写自定义函数以实现深度比较
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值