如何在对象javascript中获取具有特殊字符(389;)的键

如何在对象javascript中获取具有特殊字符(389;)的键,javascript,arrays,regex,object,Javascript,Arrays,Regex,Object,我想知道如何获取javascript中仅包含下划线的对象中的键 我希望获得下划线前带有文本的输出,如图所示 var obj={ cn_start: "SG", cn_end:"TH", cn1_start:"ML", cn1_end:"IN" } 预期产量 [ cn, cn1 ] 我相信使用reduce更好,但为了更好的可读性,我使用for循环。 首先,使用Object.keys获取键,然后迭代这些键,找到带有“u”的键,如果前缀还不存在,则推送前缀 var obj={

我想知道如何获取javascript中仅包含下划线的对象中的键

我希望获得下划线前带有文本的输出,如图所示

var obj={
  cn_start: "SG",
  cn_end:"TH", 
  cn1_start:"ML",
  cn1_end:"IN"
}
预期产量

[
  cn, cn1
]

我相信使用reduce更好,但为了更好的可读性,我使用for循环。 首先,使用Object.keys获取键,然后迭代这些键,找到带有“u”的键,如果前缀还不存在,则推送前缀

var obj={
  cn_start: "SG",
  cn_end:"TH", 
  cn1_start:"ML",
  cn1_end:"IN"
}

const keys = Object.keys(obj);
let underscoreKeys = [];
keys.forEach(key => {
  if(key.substring('_')){
    const prefix = key.split('_')[0];
    if(underscoreKeys.indexOf(prefix) < 0){
      underscoreKeys.push(prefix);
    }
  }
});

console.log(underscoreKeys);
var obj={
cn_开始:“SG”,
完:"TH",,
cn1_开始:“ML”,
cn1_结束:“在”
}
常量键=对象键(obj);
设下划线keys=[];
keys.forEach(key=>{
if(键子字符串(“”){
const prefix=key.split(“”“)[0];
if(下划线keys.indexOf(前缀)<0){
下划线keys.push(前缀);
}
}
});
console.log(下划线键);

要获得与Internet Explorer兼容的答案,请尝试以下操作:

var obj={
  cn_start: "SG",
  cn_end:"TH", 
  cn1_start:"ML",
  cn1_end:"IN"
}

var objkeys = Object.keys(obj);

var underscorekeys = [];

for(var i = 0; i < objkeys.length; i++) {
    var index = objkeys[i].indexOf("_");
    if(index > -1) {
        var prefix = objkeys[i].substr(0, index);
        if(underscorekeys.indexOf(prefix) < 0)
            underscorekeys.push(prefix);
    }
}

console.log(underscorekeys);
var obj={
cn_开始:“SG”,
完:"TH",,
cn1_开始:“ML”,
cn1_结束:“在”
}
var objkeys=Object.keys(obj);
var下划线键=[];
for(var i=0;i-1){
var prefix=objkeys[i].substr(0,索引);
if(下划线keys.indexOf(前缀)<0)
下划线keys.push(前缀);
}
}
console.log(下划线键);

其他答案使用“箭头函数”或“lambda函数”,即ES6和

您可以使用从对象中获取键,然后过滤掉所有没有下划线的键。接下来,您可以通过删除下划线
\uuu
及其尾部文本(使用
.replace(/。+/,“”)
)来将每个键指向其自身的子字符串。然后,您可以使用删除任何重复项,并将该集合转换回阵列:

const对象={
cn_开始:“SG”,
完:"TH",,
cn1_开始:“ML”,
cn1_结束:“在”
}
const get_keys=obj=>
数组.from(新集合(Object.keys(obj).filter(k=>k.includes(“”)).map(k=>k.replace(/。+/,“”));

日志(获取密钥(obj))
将密钥名称按“u”拆分,并将其添加到
Set
以获取唯一密钥

var obj={
cn_开始:“SG”,
完:"TH",,
cn1_开始:“ML”,
cn1_结束:“在”
};
constkeys=[…新集合(Object.keys(obj.map)(key=>key.split(“”)[0]))];

控制台日志(键)
是否会有一个带有多下划线的键,例如:cn\u start\u time?@GlenK感谢您的回复,否,将采用
cn\u start