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

javascript映射函数未按预期添加到数组

javascript映射函数未按预期添加到数组,javascript,Javascript,为什么“值”数组不包含“结果”中每个项目的“标题” 以下代码输出:1,2,3,3,3,3而不是所需的:1,2,3,1,2,3 var结果=[ {标题:'1'}, {标题:'2'}, {标题:'3'}, ]; 变量字段={ 标题:{Name:“Title”,必填项:true}, 描述:{Name:“描述”,必需:false} }; var值=[]; 结果.映射(函数(结果,i){ 值[i]=字段; Object.keys(结果).map(函数(键、索引){ 值[i][key]。值=结果[key]

为什么“值”数组不包含“结果”中每个项目的“标题”

以下代码输出:
1,2,3,3,3,3
而不是所需的:
1,2,3,1,2,3

var结果=[
{标题:'1'},
{标题:'2'},
{标题:'3'},
];
变量字段={
标题:{Name:“Title”,必填项:true},
描述:{Name:“描述”,必需:false}
};
var值=[];
结果.映射(函数(结果,i){
值[i]=字段;
Object.keys(结果).map(函数(键、索引){
值[i][key]。值=结果[key];
});
console.log(值[i].Title.Value);
});

map(函数(value){console.log(value.Title.value)})映射函数不会转换当前使用的数组,它会返回一个包含更改数据的新数组,并且您将值作为空数组启动,您必须推送新值。

var结果=[
{标题:'1'},
{标题:'2'},
{标题:'3'},
];
变量字段={
标题:{Name:“Title”,必填项:true},
描述:{Name:“描述”,必需:false}
};
var值=[];
values=results.map(函数(result,i){
值[i]=字段;
Object.keys(结果).map(函数(键、索引){
值[i][key]。值=结果[key];
});
console.log(值[i].Title.Value);

});为了简单起见,您应该坚持使用reduce并使用reduce函数映射字段

var rawData=[
{标题:'1'},
{标题:'2'},
{标题:'3'},
]
变量字段信息={
标题:{Name:“Title”,必填项:true},
描述:{Name:“描述”,必需:false}
}
var结果=transformData(原始数据、字段信息)
log(JSON.stringify(result,null,2))
result.forEach(item=>console.log('Value:',item.Title.Value))
函数转换数据(数据、字段){
返回数据.map((记录,i)=>{
返回Object.keys(字段).reduce((结果、键、索引)=>{
结果[键]={值:记录[键]| |空};
//--开始字段克隆。
Object.key(fields[key]).forEach(prop=>result[key][prop]=fields[key][prop]);
//--结束字段克隆。
返回结果
}, {})
})
}

.as console wrapper{top:0;max height:100%!important;}
如果不使用它的结果,为什么要映射?我认为你在这里混淆了map和forEach…因为你有一个对对象的引用,而不是它的副本。你在这里试图做什么-values.map(函数(值){console.log(值.Title.value)}?请以文字符号添加所需的结果。谢谢,但是为什么我不能将
result[key]={Value:record[key]}
更改为
result[key]=fields[key];结果[键]。值=记录[键]?@user247298我添加了对克隆字段数据的支持。如果要多次使用对象,则永远不要设置对该对象的引用。只需在要复制的对象上循环并克隆其属性即可。谢谢@mr polywirl。如果我想在为每个结果(如描述)返回的对象中包含没有值的字段,该怎么办?实际上,我希望值属性在这些字段中设置为“”,而不是未定义。@user247298我从字段中而不是记录中抓取了键。再次运行代码。