Альтернатива в .replace () для того, чтобы он не произвел ошибку в функции с ключами

Я создаю функцию, которая брала бы укрытую договоренность и это возвращала в договоренности unidimensional, проблема состоит в том, что я не могу заставлять это идти для случаев, в которых ключи { } были бы элементом договоренности, так как функция .replace, обнаружив lasl, ты мыл, возвращает меня "object". Какие альтернативы у меня есть для этого случая?

function steamrollArray(arr) {
var str= arr.join().replace(/,/g,""); 
  //.replace no anda me cambia los {} 
var newArr= str.split("");
  
var lastArr=[];  
  for(var x=0;x<str.length;x++){
 
    if(isNaN(str.charAt(x))===false){
      lastArr[x]=parseInt(str.charAt(x));
    }else{
      lastArr[x]=str.charAt(x);
    }
     
    
  }
  
  
  return lastArr;
}

console.log(steamrollArray([1, {}, [3, [[4]]]]));
2
задан 21.08.2016, 02:19
3 ответа

Другое возможное решение (которая, если я не ошибаюсь, делает что-то похожим на то, что я поместил в другой ответ, хотя более длинную форму) состояла бы в том, чтобы изменять функция для того, чтобы он сделал следующее:

  1. Создавать вспомогательный пустой array
  2. Подтверждать, - array ли параметр; если да это array:
    1. Разделить это на цикл
    2. Звоня в функцию перекурсивного способа для каждого элемента
    3. И прилагая результат в array шага 1
  3. , если он это не:
    1. Возвращать array с элементом
  4. Возвращать вспомогательный array шага 1.

Код был бы таким:

function steamrollArray(arr) {
  
  var aux = [];

  if (arr.constructor === Array) {
    for (var x = 0; x < arr.length; x++) {
      aux = aux.concat(steamrollArray(arr[x]));
    }
  } else {
    return [arr];
  }

  return aux;
}

console.log(steamrollArray([1, {a:1}, [3, [[4]]]]));
1
ответ дан 24.11.2019, 13:36
  • 1
    Это было решение, с которым больше я размыслил, и # 39; потому что она самая похожая на мой способ это решать, но я не понимаю совсем, как функционирует то, что внутри скобок if: if(arr.constructor === Array){} ты Мог бы объяснять мне, как он состоит в том, что оно функционирует? –  victor.ja 22.08.2016, 03:31
  • 2
    @victor.ja Просвет. if то, что он делает, состоит в том, чтобы подтверждать, - array ли (подтвержденный, если строитель - строитель Array) элемент; если он это, мы должны называть recursivamente funci и # 243; n для cade элемент array (чтобы удалять укрытые arrays); если это не array, просто мы возвращаем элемент, потому что не надо обрабатывать совсем не м и # 225; в. Надеялся оставить это немного м и # 225; s просвет, если не, d и # 237; melo и я пробую объясняться лучше –  Alvaro Montoro♦ 22.08.2016, 03:51

Если ты ищешь альтернативу в replace, serГ, - чтобы делать 'фальшиво, повторно нравься' следующего способа:

String.prototype.falsoReplace=function(str, newstr) {
    return this.split(str).join(newstr);
};

var str="Bienvenido, JavaScript";
str=str.falsoReplace('JavaScript', 'victor.ja');
alert(str);

типов Привета.

2
ответ дан 24.11.2019, 13:36

Используя ES6, Slikts он помещает aquГ - одна soluciГіn действительно короткая, чтобы делать то, что ты ищешь:

const flattenDeep = x => Array.isArray(x) ? [].concat(...x.map(flattenDeep)) : x

, которые функционируют чуда с array, который ты делишь:

const steamrollArray = x => Array.isArray(x) ? [].concat(...x.map(steamrollArray)) : x;

console.log(steamrollArray([1, {}, [3, [[4]]]]));
0
ответ дан 24.11.2019, 13:36

Теги

Похожие вопросы