You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何比较数组中两个对象的position属性并按条件修改属性值?

解决数组中索引0与1对象position相等时的重置需求

嘿,我看你已经搭好了一个简单的赛车游戏框架,要实现的需求很清晰:每次更新车辆位置后,对比数组里第1辆(索引0)和第2辆(索引1)车的position属性,如果两者数值相等,就把第1辆车的position设为0。

首先先补个小漏洞:你的代码里用了carNames数组但没声明,得先加上let carNames = [];,不然运行会报错。

接下来,最合理的做法是把检查逻辑整合到shuffleArray函数里——毕竟这个函数负责更新所有车辆的位置,更新完立刻检查处理最顺。修改后的完整代码如下:

let carNames = []; // 补上数组声明,避免报错
function carInfo(name) { this.name = name; this.position = 0; } 
let numOfCars = +prompt("Enter Number of Cars: "); 
for (let i = 0; i < numOfCars; i++) { 
    carNames.push(new carInfo(prompt(`Enter Name of Car No.${i + 1} : `))); 
} 
let str = "*"; 
str += str.repeat(300); 
console.log(str); 

function shuffleArray(array) { 
    for (let i = 0; i < array.length; i++) { 
        let temp = Math.floor(Math.random() * 10 + 1); 
        array[i].position += temp; 
        if (array[i].position >= 300) { 
            alert("game end! " + '"' + array[i].name + '"' + " win"); 
            break; 
        } 
    }

    // 新增:检查索引0和1的position是否相等,满足条件则重置
    if (array.length >= 2) { // 先确保数组至少有2辆车,避免索引越界报错
        const firstCar = array[0];
        const secondCar = array[1];
        if (firstCar.position === secondCar.position) {
            firstCar.position = 0;
            console.log(`注意:${firstCar.name}和${secondCar.name}位置相同,${firstCar.name}被重置到起点!`);
        }
    }

    return array; 
}

逻辑说明

  • 边界处理:先判断数组长度≥2,防止用户只输入1辆车时,访问array[1]导致报错;
  • 直观对比:直接取出两个目标对象的position属性做相等判断;
  • 调试友好:添加控制台日志,方便你直观看到重置操作是否触发。

如果你不想修改shuffleArray函数,也可以在外部调用它之后单独处理,比如:

// 先调用洗牌函数更新位置
carNames = shuffleArray(carNames);
// 再单独执行检查重置逻辑
if (carNames.length >= 2 && carNames[0].position === carNames[1].position) {
    carNames[0].position = 0;
}

两种方式都能实现你的需求,看你更习惯哪种代码组织方式啦~

内容的提问来源于stack exchange,提问作者Majid Khorshidian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:31:59