как получить ключ, имеющий специальный символ (_) в объекте javascript - PullRequest
0 голосов
/ 03 февраля 2020

Я хотел бы знать, как получить ключи в объекте, содержащем только подчеркивание в javascript.

Я хотел бы получить вывод с текстом перед подчеркиванием, как показано

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

Ожидаемый результат

[
  cn, cn1
]

Ответы [ 4 ]

0 голосов
/ 03 февраля 2020

Разделите имена ключей по '_' и добавьте их к Set, чтобы получить уникальные ключи.

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

const keys = [...new Set(Object.keys(obj).map(key => key.split("_")[0]))];

console.log(keys);
0 голосов
/ 03 февраля 2020

Для ответа, совместимого с Inte rnet 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);

В других ответах используются «функции стрелок» или «лямбда-функции», то есть ES6 и , а не IE совместимый .

0 голосов
/ 03 февраля 2020

Вы можете получить ключи от вашего объекта, используя Object.keys(), а затем отфильтровать все ключи, в которых нет подчеркивания. Затем вы можете .map() каждый ключ подстроки, удалив подчеркивание _ и его завершающий текст (используя .replace(/_.+/, '')). Затем вы можете использовать new Set для удаления любых дубликатов и Array.from, чтобы превратить этот набор обратно в массив:

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

const get_keys = obj =>
  Array.from(new Set(Object.keys(obj).filter(k => k.includes('_')).map(k => k.replace(/_.+/, ''))));
  
console.log(get_keys(obj));

Если вы знаете, что все ваши ключи будут иметь подчеркивание, то вы можете удалить .filter().

0 голосов
/ 03 февраля 2020

Я считаю, что лучше использовать уменьшение, но для лучшей читаемости я использую для l oop. Сначала вы получаете ключи с помощью Object.keys, а затем итерируете ключи, находя ключи с '_' и префиксом pu sh, если он еще не существует.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...