Как я могу сократить (1) слова Camel-регистра?

arrDuplicateValues является объектом во второй раз, потому что массив не имеет строкового индекса. Таким образом, хотя вы инициализировали его как Array (), в конечном итоге он стал картой (пара ключ-значение), поэтому, когда вы просто пытались напечатать всю карту, ничего не получилось. Если вы просто измените инициализацию на arrDuplicateValues = {}; во второй раз, она будет работать нормально.

var arrNumber = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 4, 6, 8, 0 ,4, 6, 8, 4];
var arrString = ["a", "e", "i", "o", "u", "a", "i", "u", "i"];

var arrDuplicateValues = new Array();
// Fist time: Only number
arrNumber.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // OK


// Second time: With string
arrDuplicateValues = {};
arrString.forEach(x => {
  arrDuplicateValues[x] = (arrDuplicateValues[x] || 0) + 1;
});
console.log(arrDuplicateValues); // NOK
console.log(arrDuplicateValues["i"]);
8
задан lindelof 5 March 2009 в 14:15
поделиться

2 ответа

sed 's/\([A-Z]\)/ \1/g'

Получения каждая прописная буква и замены ведущее пространство с получением для целого потока.

$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g'
a Certain Camel Cased Word
27
ответ дан 5 December 2019 в 05:27
поделиться

Чистый Bash:

name="aCertainCamelCasedWord"

declare -a word                                 # the word array

counter1=0                                      # count characters
counter2=0                                      # count words

while [ $counter1 -lt ${#name} ] ; do
  nextchar=${name:${counter1}:1}
  if [[ $nextchar =~ [[:upper:]] ]] ; then
    ((counter2++))
    word[${counter2}]=$nextchar
  else
    word[${counter2}]=${word[${counter2}]}$nextchar
  fi
  ((counter1++))
done

echo -e "'${word[@]}'"
0
ответ дан 5 December 2019 в 05:27
поделиться