创建JavaScript对象而不重复
我试图创建一个应该由PHPAPI处理的JavaScript对象 应该是这样的:创建JavaScript对象而不重复,javascript,arrays,api,Javascript,Arrays,Api,我试图创建一个应该由PHPAPI处理的JavaScript对象 应该是这样的: [{ 'targetId': 'roof', 'color': 'red' }, { 'targetId': 'window', 'color': 'green' }] 这些值应在用户输入时生成,例如,每当用户单击一个名为“roof”的元素时,它将循环通过一些颜色,与“window”相同(+多个其他颜色) 我现在得到的是: let requestJSON=[] 让超时=未定义 myElement.a
[{
'targetId': 'roof',
'color': 'red'
},
{
'targetId': 'window',
'color': 'green'
}]
这些值应在用户输入时生成,例如,每当用户单击一个名为“roof”的元素时,它将循环通过一些颜色,与“window”相同(+多个其他颜色)
我现在得到的是:
let requestJSON=[]
让超时=未定义
myElement.addEventListener('click',函数(e){
设target=e.target;
设targetID=target.id
让颜色=颜色[getNumber(e.target)]
target.setAttribute('fill',color)
设thisJSON=
{
“targetId”:targetId,
“颜色”:颜色
}
updateRequest(thisJSON)
})
函数更新请求(输入){
如果(超时!=未定义)clearTimeout(超时)
push(输入)
超时=设置超时(()=>{
log(requestJSON)
//makeRequest(requestJSON)
}, 1000);
}
函数makeRequest(body){
body=JSON.stringify(body)
取('https://myapi.com/setcolor', {
身体:身体,,
方法:“发布”
})
。然后((res)=>{
返回console.log(res.json())
})
.catch((错误)=>{
控制台错误(错误)
})
}
目前,这将多次将同一元素推送到JavaScript对象,即使它已经存在
我需要实现的是,JavaScript对象中不应该有任何重复值:在将元素推送到数组之前,函数应该检查targetId
是否已经存在,并且只更新相应的值
这里的正确方法是什么?提前谢谢 您可以使用检查具有给定targetId
的对象是否已存在。因此,对更新请求(输入)
进行以下更改:
Array#find
在这里可能很有用。给定正确的回调,它将找到具有匹配的targetId
,然后您可以直接更新该对象(例如match.color=color;
),因为该对象将通过引用进行更新。如果未找到match
,可以通过将其添加到数组中来处理这种情况。首先,thisJSON不是JSON,而是Javascriptobject@Liam绝对正确@NiettheDarkAbsol会试试的,谢谢!这几乎就是我想要的。当元素已经存在时,它会跳过该元素,但我希望它用一个新值更新,而不是更新答案,谢谢!另一种方法是使用findIndex
,如下所述
function updateRequest(input) {
if (timeout != undefined) clearTimeout(timeout)
let obj = requestJSON.find(elem=>elem.targetId === input.targetId)
// If targetId already exists in requestJSON, update color, else push
if(obj)
obj.color = input.color
else
requestJSON.push(input)
timeout = setTimeout(() => {
console.log(requestJSON)
// makeRequest(requestJSON)
}, 1000);
}