使用了3个AI工具来写这个方法,其中CodeGeeX
和C知道
的结果比较离谱。
最后使用AIchatOS
生成了一个基本可用的。
提问内容:
js有个数组,写一个判断指定的key的值是否重复的方法,函数带详细的注释。这里指定的key为“remarks”,层次可能有多层,使用父节点“then”包裹子级层次。函数有3个参数:数组、key,父节点名。
原来的回答是这样的:
function hasDuplicateRemarks(arr, key, parentKey) {
const seen = new Set(); // 用于存储已见的 remarks 值
function check(arr) {
for (const item of arr) {
if (item[key]) {
// 检查当前节点的 remarks 是否重复
if (seen.has(item[key])) {
return true; // 找到重复的 remarks
}
seen.add(item[key]); // 记录该 remarks
// 如果存在父节点,递归检查其子节点
if (item[parentKey] && Array.isArray(item[parentKey])) {
const hasChildDup = check(item[parentKey]);
if (hasChildDup) return true; // 如果子节点有重复,返回 true
}
}
}
return false; // 没有找到重复
}
return check(arr); // 开始检查传入的数组
}
// 使用示例
const arr = [
{ remarks: "顶层浮窗:看广告" },
{ remarks: "中间层:开宝箱" },
{ remarks: "任务中心" },
{
remarks: "左上菜单:任务中心",
then: [{ remarks: "任务中心" }]
},
{
remarks: "首页",
then: [{
remarks: "菜单",
then: [{ remarks: "菜单" }]
}]
}
];
console.log(hasDuplicateRemarks(arr, 'remarks', 'then')); // 输出:true
实测结果有细微偏差。手工修改了一下,加了个result
来控制判断的跳出。
/**
* 检查指定键的值是否在嵌套的数组结构中重复
* @param {Array} arr - 要检查的数组
* @param {string} key - 要检查的键
* @param {string} parentKey - 父节点键名(默认为 "then")
* @returns {boolean} - 如果有重复的键值返回 true,否则返回 false
* @author 飞云
* @wechat imfeiyun
* @link http://www.feiyunjs.com
*/
function hasDuplicateRemarks(arr, key, parentKey) {
const seen = new Set(); // 用于存储已见的 remarks 值
let result = false;
function check(arr) {
for (let item of arr) {
if (item[key]) {
// 检查当前节点的 remarks 是否重复
if (seen.has(item[key])) {
console.log('节点重复:', item[key])
result = true;
break; // 找到重复的 remarks
}
seen.add(item[key]); // 记录该 remarks
// 如果存在父节点,递归检查其子节点
if (item[parentKey] && Array.isArray(item[parentKey])) {
const hasChildDup = check(item[parentKey]);
if (hasChildDup) {
console.log('子节点重复:', item[key])
result = true;
break; // 在子节点找到重复的 remarks
}
}
}
}
return result; // 没有找到重复
}
return check(arr); // 开始检查传入的数组
}
// 使用示例
const arr = [
{ remarks: "顶层浮窗:看广告" },
{ remarks: "中间层:开宝箱" },
{
remarks: "左上菜单:任务中心",
then: [{ remarks: "任务中心" }]
},
{
remarks: "首页",
then: [{
remarks: "菜单",
then: [{ remarks: "菜单" }]
}]
}
];
console.log(hasDuplicateRemarks(arr, 'remarks', 'then')); // 输出:true
这个函数会检查数组中的每个对象及其嵌套的 then 属性,判断是否存在相同的 remarks 值。
如果找到重复的值,函数将返回 true;否则返回 false。
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » JavaScript使用递归方法来判断多层数组中指定 key 的值是否重复
飞云脚本圈: 586333520
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » JavaScript使用递归方法来判断多层数组中指定 key 的值是否重复