Nodejs 有哪些方法可以检测JS对象存在属性重复?

Nodejs 有哪些方法可以检测JS对象存在属性重复?

var a={ ‘f2’:{‘name’:‘11’}, ‘f2’:{‘name’:‘12’} }

最后a.f2.name的值是12,如何检测对象中是否存在属性重复呢?

8 回复

在 Node.js 中,检测 JavaScript 对象中的属性重复是一个常见的需求。由于 JavaScript 对象在添加相同名称的属性时会覆盖旧值,因此需要一些额外的方法来检查这种重复。以下是几种常用的方法来检测对象中是否存在属性重复:

方法一:使用 Object.keysSet

我们可以利用 Set 数据结构来存储对象的所有键,并检查是否有重复的键。

function hasDuplicateKeys(obj) {
    const keys = Object.keys(obj);
    const uniqueKeys = new Set(keys);
    
    return keys.length !== uniqueKeys.size;
}

const a = {
    'f2': {'name': '11'},
    'f2': {'name': '12'}
};

console.log(hasDuplicateKeys(a)); // 输出 true,表示存在重复的键

方法二:使用 for...in 循环

我们可以通过遍历对象的每个键并将其添加到一个数组中,然后检查数组是否有重复项。

function hasDuplicateKeys(obj) {
    const keys = [];
    for (const key in obj) {
        if (keys.includes(key)) {
            return true;
        }
        keys.push(key);
    }
    return false;
}

const a = {
    'f2': {'name': '11'},
    'f2': {'name': '12'}
};

console.log(hasDuplicateKeys(a)); // 输出 true,表示存在重复的键

方法三:使用 lodash

如果你已经在项目中使用了 lodash 库,可以利用 _.keys_.uniq 方法来检测重复键。

const _ = require('lodash');

function hasDuplicateKeys(obj) {
    const keys = _.keys(obj);
    const uniqueKeys = _.uniq(keys);
    
    return keys.length !== uniqueKeys.length;
}

const a = {
    'f2': {'name': '11'},
    'f2': {'name': '12'}
};

console.log(hasDuplicateKeys(a)); // 输出 true,表示存在重复的键

以上三种方法都可以有效地检测对象中是否存在属性重复。选择哪种方法取决于你的具体需求和项目环境。


赋值的时候用 in 操作符检测一下? 后面的赋值会覆盖前面的

你没法定义一个具有两个相同key的object吧

var a={
'f2':{'name':'11'},
'f2':{'name':'12'}
}
console.log(a); // { f2: { name: '12' } }

如果你是拿到这样一个不合法的json,在parse的时候也会报错的。那么问题来了,怎么去定义一个有2个相同属性的object?

Object.hasOwnProperty这个不能玩吗?

var a={
  'f2’:{’name’:’11’},
  'f2’:{’name’:’12’}
}

这个执行完,a变量里面只有一个f2属性了吧,第一个f2属性被覆盖掉了。所以根本不存在包含某个属性两次,也就无法在赋值后进行检测了吧。

最多可以在赋值前进行检测,比如用 in

一个属性怎么会有两个呢?写个demo出来分享一下怎么让一个对象拥有两个重复属性?

引入严格模式:

// test.js
'use strict';
var obj = {
  a: '1',
  a: '2'
};
console.log(obj);

执行node test.js,报错:

SyntaxError: Duplicate data property in object literal not allowed in strict mode

在Node.js中,可以通过多种方法来检测JavaScript对象中的属性重复。以下是几种常见的方法:

方法一:使用 Object.keysSet

通过将对象的所有键转换为一个数组,然后使用 Set 来检查是否有重复的键。

function hasDuplicateKeys(obj) {
    const keys = Object.keys(obj);
    const uniqueKeys = new Set(keys);
    return keys.length !== uniqueKeys.size;
}

const a = {
    'f2': {'name': '11'},
    'f2': {'name': '12'}
};

console.log(hasDuplicateKeys(a)); // 输出: true

方法二:使用 for...in 循环

遍历对象的所有可枚举属性,并使用一个集合来跟踪已遇到的属性。

function hasDuplicateKeys(obj) {
    const seen = new Set();
    for (const key in obj) {
        if (seen.has(key)) {
            return true;
        }
        seen.add(key);
    }
    return false;
}

const a = {
    'f2': {'name': '11'},
    'f2': {'name': '12'}
};

console.log(hasDuplicateKeys(a)); // 输出: true

解释

  1. 方法一 利用 Object.keys 获取对象的所有键,并将其放入一个数组中。然后创建一个 Set,如果 Set 的大小与数组长度不同,则说明有重复的键。

  2. 方法二 使用 for...in 循环遍历对象的所有可枚举属性。在遍历过程中,使用一个 Set 来存储已遇到的键。一旦发现某个键已经存在于 Set 中,则表明该键重复。

这两种方法都可以有效地检测对象中的属性重复问题。

回到顶部