Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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_Json - Fatal编程技术网

Javascript-在多个数组或字符串中拆分并返回数组

Javascript-在多个数组或字符串中拆分并返回数组,javascript,arrays,json,Javascript,Arrays,Json,我有这样一个json: {"search":{"updated":"2018-11-07","name":[{"tag":"Peter"}]}} {"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 。。。我动态获取值并创建一个变量,如下所示: var existingParams = [ "name", "updated"].filter(field =>

我有这样一个json:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"}]}}
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。我动态获取值并创建一个变量,如下所示:

var existingParams = [
"name",
"updated"].filter(field => getBody.search[field]);

var sqlVal = existingParams.map(field => {
 if (field === 'name') {
     function getValues(item, index) {
       var getVal = [item.tag];
       return "%" + getVal + "%";
     }
     console.log(name.map(getValues));
     return name.map(getValues);

   } else {
     return getBody.search[field];
   }
 })
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
对于上面的示例,我得到了sqlVal:

console.log(sqlVal);         

[ [ '%Peter%' ], '2018-11-07' ]
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。这很好

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
但是,如果我有两个值:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"}]}} 
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。我得到了这个结构:

[ [ '%Peter%', '%Jack%' ], '2018-11-07' ]   
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。但我需要的是:

[ '%Peter%', '%Jack%', '2018-11-07' ]
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。或:

[ ['%Peter%'], ['%Jack%'], '2018-11-07' ]
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
[ ['%Peter%'], ['%Jack%'], ['%Maria%'], '2018-11-07' ]
如果还有其他名称,例如3个名称:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
。。。我需要像这样的东西:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
[ '%Peter%', '%Jack%', '%Maria%', '2018-11-07' ]        
。。。或:

[ ['%Peter%'], ['%Jack%'], '2018-11-07' ]
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
[ ['%Peter%'], ['%Jack%'], ['%Maria%'], '2018-11-07' ]
。。。等等

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 

我需要如何调整上述查询才能获得此结果?

如果我正确理解您的问题,则可以通过
数组#reduce()
方法解决此问题

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
这种方法的总体思路是将输入对象转换为数组-可以使用reduce操作来实现这一点,特殊情况下的规则是将
name
键上的嵌套值“展平”为最终结果:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
var input={“search”:{“updated”:“2018-11-07”,“name”:[{“tag”:“Peter”},{“tag”:“Jack”}]}
var结果=对象
.条目(输入.搜索)
.reduce(函数(结果、条目){
常量键=条目[0]
常量值=条目[1]
如果(键=='name'){
//遇到“name”键时,处理该值
//不同的是,通过添加此值数组的项
//结果
value.forEach(函数(项){
结果.推送('%'+item.tag+'%'))
})
}
否则{
//将其他键的值直接附加到结果
结果。推送(值)
}
返回结果
}, [])
console.log(result)
您可以简单地将+用于以下内容:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"}]}}
{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
const json={“search”:{“updated”:“2018-11-07”,“name”:[{“tag”:“Peter”},{“tag”:“Jack”},{“tag”:“Maria”}}
const result=Object.values(json.search).reduce((r,c)=>
(Array.isArray(c)?r.push(…c.map(({tag})=>`%${tag}%`)):r.push(c),r),[])
console.log(结果)
首先,您没有提供详细的信息,因此我很难找出您遇到的问题。例如,您正在引用
现有参数
,但未定义它们。这是理解问题的关键,因为您发布的所有代码都在该值的值和格式上投入了大量资金

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
第二,如何解析JSON?使用标准的
JSON#parse
函数,您将获得一个与您提供的JSON结构相同的对象。但是,您要么不使用该格式,要么在将对象解析为新格式后对其进行变异。无论如何,
JSON#parse
为提供的JSON返回的对象不是数组,因此不能在其上使用
array#map

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
为了提高效率,我将尝试解释如何做事

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
JSON:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
let data1='{“search”:{“updated”:“2018-11-07”,“name”:[{“tag”:“Peter”}]},
数据2='{“搜索”:{“更新”:“2018-11-07”,“姓名”:[{“标签”:“彼得”},{“标签”:“杰克”}]}',
数据3={“搜索”:{“更新”:“2018-11-07”,“姓名”:[{“标签”:“彼得”},{“标签”:“杰克”},{“标签”:“玛丽亚”}]}};
现在我们有了JSON数据,我们需要解析它并将其存储为JSON对象。为此,我将创建一个函数;通过这种方式,数据可以传递到相同的函数,并以相同的方式处理,但实现将保持不变。此外,由于我们只查看
搜索
属性中的值,因此我们将继续并直接跳入其中

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
解析JSON:

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
函数解析响应(响应){
让parsedResponse=JSON.parse(response);
parsedResponse=parsedResponse['search'];
}
现在我们有了接收响应并对其进行解析的函数,我们就可以开始对其进行排序,以找到并隔离我们想要的部分。在本例中,我们将添加一些代码来循环遍历我们的属性,并找到
更新的
名称
属性

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
函数解析响应(响应){
让parsedResponse=JSON.parse(response);
parsedResponse=parsedResponse['search'];
for(让prop进入parsedResponse){
如果(道具==‘已更新’){
//用“更新”来做事情
}
如果(prop==='name'){
//用“名字”做东西
}
}
}
因为我们想要返回一个结果,所以我们要添加一个变量
updated
names
,它将保存我们从字符串中提取的值,直到我们准备好返回它们为止。现在我们有了循环和临时变量,我们可以继续从数据中提取更新的值,并将其放入
updated
变量中

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
函数解析响应(响应){
让parsedResponse=JSON.parse(response),
更新=“”,
名称=[];
parsedResponse=parsedResponse['search'];
for(让prop进入parsedResponse){
如果(道具==‘已更新’){
更新=解析响应[prop];
}
如果(prop==='name'){
//用“名字”做东西
}
}
}
当我们的
更新的
值平方后,我们就可以跳入我们的名字了。既然您列出了格式
['%name%','%name%','%name%','%name%]]
,我将首先向您演示如何以这种方式进行操作。在这里,我们将获取属性
name
,遍历名称,获取
标记
属性,然后添加
%
s,然后将其推送到我们的
name
临时变量

{"search":{"updated":"2018-11-07","name":[{"tag":"Peter"},{"tag":"Jack"},{"tag":"Maria"}]}} 
函数解析响应(响应){
让parsedResponse=JSON.parse(response),
更新=“”,
名称=[];
parsedResponse=parsedResponse['search'];
for(让prop进入parsedResponse){
如果(道具==‘已更新’){
更新=解析响应[prop];
}
如果(prop==='name'){
for(设i=0;i