Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript在对象中创建和查找值_Javascript_Arrays_Object_Data Structures_Filter - Fatal编程技术网

javascript在对象中创建和查找值

javascript在对象中创建和查找值,javascript,arrays,object,data-structures,filter,Javascript,Arrays,Object,Data Structures,Filter,我有一个具有以下属性的JavaScript对象 { name:"Request", data:[1,2,3,4,5,6,7,8,9,10,11,12] }, { name:"Waiting", data:[1,2,3,4,5,6,7,8,9,10,11,12] } 我有一个包含状态(名称)和月份(数据:[])的列表 首先,我想验证名为“Request”的对象是否存在 如果不存在,请创建一个新对象。 {名称:'Request',数据:[]} 如果名称已经存在,它将检查对象数组“d

我有一个具有以下属性的JavaScript对象

{
  name:"Request",
  data:[1,2,3,4,5,6,7,8,9,10,11,12]
},
{
  name:"Waiting",
  data:[1,2,3,4,5,6,7,8,9,10,11,12]
}
我有一个包含状态(名称)和月份(数据:[])的列表 首先,我想验证名为“Request”的对象是否存在

如果不存在,请创建一个新对象。
{名称:'Request',数据:[]}

如果名称已经存在,它将检查对象数组“data”中是否存在月份。如果数组中没有月份,则必须输入它。
{name:'Request',data:[1]}

一个简单的解决方案是使用indexOf。你需要它在一个变量中

var myarray=[{
名称:“请求”,
数据:[1,2,3,4,5,6,7,8,9,10,11,12]
},
{名称:“等待”,
数据:[1,2,3,4,5,6,7,8,9,10,11,12]
}];
var myreturn=false;
对于(i=0;myarray.length>i;i++){
var data=myarray[i];
如果(data.name==“请求”){
myreturn=true;
}
if(myreturn==true){
警报(“甜蜜的现在做一些代码”);
打破
}
}
var列表=[{
名称:“等待”,
数据:[1,2,3,4,5,6,7,8,9,10,11,12]
}]
var request=list.filter(status=>status.name==“request”);
if(request.length==0)list.push({name:“request”,数据:[1]});
else if(请求[0].data.length==0)请求[0].data.push(1);

console.log(list)
如果一切顺利,我不完全确定您想要做什么,但是下面的代码应该满足您提供的要求

var objs=[{
名称:“请求”,
数据:[1,2,3,4,5,6,7,8,9,10,11,12]
},
{
名称:“等待”,
数据:[1,2,3,4,5,6,7,8,9,10,11,12]
}];
var月=25;
var请求=null;
//验证名为“Request”的对象是否存在。
var requestExists=objs.some(函数(elem){
if(elem.name==“请求”){
请求=元素;
返回true;
}
});
//如果不存在,请创建一个新对象。{名称:'Request',数据:[]}。
如果(!requestExists){
push({name:“Request”,数据:[]});
}
否则{
//如果名称确实存在,请检查“数据”数组中是否存在月份。
//如果数组中没有月份,则必须输入它。{name:'Request',data:[1]}
if(request.data.indexOf(月)=-1){
请求.数据.推送(月);
}
}
控制台日志(请求);

console.log(objs)由于OP示例中的数据结构必须在遵循某些规则的同时进行检查和修复,因此更通用的方法应该寻找一种既可以自己操作(手动提供密钥)又可以作为reduce方法运行的特定消毒功能,如果涉及到根据多个数据项键对数据结构进行反检查(如OP的原始示例中提供的“Request”)

那么,一个解决方案很可能接近下一个提供的解决方案

确实为和提供了多填充

function-sanitizeDataList(列表,键){
变量
indexOfDataItem=list.findIndex(函数(dataItem){
返回(dataItem.name==键);
}),
dataItem=列表[indexOfDataItem];
如果(!dataItem){
list.push(数据项={
姓名:key
});
}

if(!Array.isArray(dataItem.data)|(dataItem.data.length查看格式化代码的提示。如果人们能够轻松阅读您所写的内容,并且不要垃圾邮件发送不相关的标记,您将获得更好的响应。您的代码在语法上无效,但即使是无效的,indexOf也不会查看对象内部。如何初始化数组?请重新查看,我不正确,使用了for循环是正确的解决方案没有初始化,您可以使用单击,甚至只是简单的windows.load来运行此操作。但是objs最初不存在,它是空的。因为它是初始化的,所以只需将var obj=new array();?@JoséFidalgo这很好,此代码将处理此问题。您将得到一个如下所示的数组:
[{name:“请求”,数据:[]}]
@JoséFidalgo…为什么您首先将此作为已接受的答案授予,然后在几秒钟后将其撤回?它是意外授予的,还是与现在/当前已接受的答案相比还不够好?