Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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_Jquery_Arrays_Json_Object - Fatal编程技术网

Javascript 以适当的格式创建对象

Javascript 以适当的格式创建对象,javascript,jquery,arrays,json,object,Javascript,Jquery,Arrays,Json,Object,我试图创建一个特定格式的对象,但在获取所需数据时遇到了一些问题 这是我的职责: arr.forEach(headers => { let heads = headers.replace(/_/g, ' '); const metrics = { 'cht': { headers: { 'name': heads } } } console.log(

我试图创建一个特定格式的对象,但在获取所需数据时遇到了一些问题

这是我的职责:

arr.forEach(headers => {
    let heads = headers.replace(/_/g, ' ');
    const metrics = {
        'cht': {
            headers: {
                'name': heads
            }
        }
    }
    console.log(metrics);
});
我的结果是:

{cht: {headers: {name: "Hello World"}}}
预期结果:

{cht: {Hello_World: {name: "Hello World"}}}

为什么我的对象中的值
标题
(要剪切)没有被替换?我需要标题是
Hello\u World

指定为替换的“标题”的值,您已将其设置为变量“标题”

然后将其指定为属性“name”的值。 您的意思是将其设置为标题的属性吗

let heads = headers.replace(/_/g, ' ');
    const metrics = {
        'cht': {
            headers: {
                heads: 'someValue'
            }
        }
    }

你可以向后看,replace中的第一个参数是要查找的RegExp,第二个参数是要用什么来替换它。它应该是
标题。替换(//g,'.''.')


假设您提供的是
标题='Hello World'
<正在替换代码>标题

您的替换模式正在查找要替换为空白字符的文本

但听起来你正试图做相反的事情


replace(/\s/g,“,”)
或简单地
replace(“,”)
将导致
'Hello\u World'

创建对象时,属性键(位于:)通常不作为变量处理,而是作为名称使用,与键入的完全相同

在较新版本的Javascript(ECMAScript 6 on)中,可以在名称周围放上括号,以便将变量值本身用作属性键

arr.forEach(headers => {
    let heads = headers.replace(/_/g, ' ');
    const metrics = {
        cht: {
            [headers]: heads
        }
    }
    console.log(metrics);
});

使用
split
map
获得预期输出

const capitalize=(str)=>`${str.charAt(0.toUpperCase()}${str.slice(1)}`;
常量规范化=(name=”“)=>{
如果(!name)返回名称;
返回名称.split(/\s+/).map(大写).join(“”);
};
常量转换=(arr)=>{
arr.forEach((headers=”“)=>{
让heads=标准化(headers);
常数度量={
红隧:{
[heads]:{name:headers}
},
};
console.log(度量);
});
};
const arr=[“你好,世界”,“测试一些东西”];

变换(arr)您可以使用以下命令

headers.split(" ").join("_");


你所说的被替换是什么意思?你没有对
标题做任何操作。反向替换,src到des:
标题。替换(//g,'.''.')
我做了。但是值
headers
仍然是sameI添加的预期结果,只需在
headers
周围放一个括号,比如:
'cht':{[headers]:{'name':heads}
我这样做了。但是值头仍然是sameI添加的预期结果。您的输入
['Hello World']
['Hello\u World']
?我添加了预期结果
头='Hello\u World'
头=头。替换(/\ug')
这使得
head=Hello World
我看到问题已经更新了。我的答案不再适用。我想说@ThisIsNoZaku在问题中提供的新上下文中有正确的答案。key应该按OP预期大写:
{cht:{Hello_World:{name:“Hello World”}}
我有没有办法在forEach循环之外使用
度量值
headers.split(" ").join("_");
headers.replace(/ /g, '_')