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

#javascript #arrays #typescript

#javascript #массивы #typescript

Вопрос:

Входной массив

 var array = [
  'name',
  '"Mobile Number"',
  '"mobile1,mobile2"',
  'email2',
  'Address',
  'email21'
]

var matchkey = 'mobile1,mobile2'

res = res.map(function (value) {
if(value==matchkey){
return value ".string()"
}
else {
return value ".auto()"
}
            
        })
 

Текущий вывод из приведенного выше кода

 [
  'name.auto()',
  '"Mobile Number".auto()',
  '"mobile1,mobile2".auto()',
  'email2.auto()',
  'Address.auto()',
  'email21.auto()'
]
 

Ожидаемый вывод;

 [
  'name',
  '"Mobile Number.auto()"',
  '"mobile1,mobile2.string()"',
  'email2.auto()',
  'Address.auto()',
  'email21.auto()'
]
 

Примечание: я не хочу удалять двойные кавычки, которые находятся внутри одинарных кавычек, потому что это требуется для дальнейшей обработки

Ответ №1:

Ваш ключ соответствия не существует в вашем массиве.

Строка в массиве: ‘»mobile1,mobile2″‘

Совпадающий ключ: ‘mobile1,mobile2’

Вы должны изменить свой ключ соответствия на:

 var matchkey = '"mobile1,mobile2"'
 

Кроме того, я не понимаю вашей цели, но если ожидаемый результат должен иметь строку имени без доступа к функции, тогда вам следует добавить оператор else if:

 if(value == matchkey){
    return value ".string()";
} else if(value == 'name') {
    return value;
} else {
    return value ".auto()";
}
 

Ответ №2:

Возможно, это?

 var array = [
  'name',
  '"Mobile Number"',
  '"mobile1,mobile2"',
  'email2',
  'Address',
  'email21'
]

var matchkey = '"mobile1,mobile2"'

const res = array.map(function(value) {
  return value == matchkey ? value.slice(0,-1)   ".string()"" : 
    value.endsWith('"') ? value.slice(0,-1)   ".auto()"  '"' : value   ".auto()"
})
console.log(res) 

Ответ №3:

Вы можете использовать регулярное выражение для замены:

 const result = array.map((element) =>
  element.replace(/^("?)(.*?)("?)$/, function () {
    return `${
      arguments[1]
    }${arguments[2]   (arguments[2] === matchkey ? '.string()' : '.auto()')}${arguments[3]}`;
  })
); 

Ответ №4:

Я думаю, что если вы измените с value==matchkey на value.includes(matchkey) , это будет ваш желаемый результат.

 var array = [
  "name",
  '"Mobile Number"',
  '"mobile1,mobile2"',
  "email2",
  "Address",
  "email21",
];

var matchkey = "mobile1,mobile2";

res = array.map(function (value) {
  if (value.includes(matchkey)) {
    return value   ".string()";
  } else {
    return value   ".auto()";
  }
});

console.log(res);