javascript属性循环乱序问题、JSON.parse顺序错乱问题的解决

let jsonStr=`{"aaa":111,"bbb":222}`;
let json=JSON.parse(jsonStr);//循环时希望保持这个顺序
let keys=Object.keys(json);//javascript里的对象是一个无序hash结构,这是语言规范和浏览器决定的,我们无法违背,Object.keys拿到的顺序是乱的。
if(!Array.isArray(json)){//json数组本身就是保持顺序的,不用处理,这里只处理json对象
	keys.sort(function(a,b){
		let idx1=jsonStr.indexOf("\""+a+"\"");//只判断标准的双引号形式的json-key
		let idx2=jsonStr.indexOf("\""+b+"\"");//只判断标准的双引号形式的json-key
		return idx1-idx2;//index小的排前面
	});
}

for (const key of keys) {//这时候循环的就是字符串里的顺序
	let value=json[key];
}
			
function clickDom(dom) { if (clickFalge) { // 点击 div 后执行的函数 // 获取被点击的 div DOM 元素的 ID clickFalge = false; const clickedId = JSON.parse(dom); const clickedIndex = idArray.indexOf(clickedId.equipmentId); console.log(clickedIndex); if (clickedIndex >= 0) { const divObject = divObjects[clickedIndex]; const x = divObject.position.x; const z = divObject.position.z; console.log(x, z); divObject.position.set(0, 0, radius); divObject.element.style.zIndex = 1; for (let i = 0; i < divObjects.length; i++) { if (clickedIndex !== i) { const divObject1 = divObjects[i]; const posX = radius * Math.cos(angle * i); const posY = 0; const posZ = radius * Math.sin(angle * i); divObject1.position.set(posX, posY, posZ); divObject1.element.style.zIndex = 0; } } } // 将被点击的 div 定位到最前方放置正中间 // for (let i = 0; i < divObjects.length; i++) { // const divObject = divObjects[i]; // if (i === clickedIndex) { // // 被点击的 div 保持在圆心位置 // console.log(divObject.position) // } else if (clickedIndex >= 0) { // // 计算其他 div 的位置 // let angleDiff = i - clickedIndex; // if (angleDiff < 0) { // angleDiff += divObjects.length; // } // angleDiff *= angle; // const posX = radius * Math.cos(angleDiff); // const posY = 0; // const posZ = radius * Math.sin(angleDiff); // divObject.position.set(posX, posY, posZ); // divObject.element.style.zIndex = 0; // } // } renderer.render(scene, camera); // 渲染场景和相机 // 暂停动画 cancelAnimationFrame(animationFrameId); var timer = setTimeout(() => { requestAnimationFrame(render); clearTimeout(timer); clickFalge = true; }, 3000) } } 这段代码执行后点击div,被点击的div定位到指定位置,其他div分布错乱
05-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值