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"]);
sed 's/\([A-Z]\)/ \1/g'
Получения каждая прописная буква и замены ведущее пространство с получением для целого потока.
$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g'
a Certain Camel Cased Word
Чистый 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[@]}'"