Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Удалить из массива пустые элементы (https://javascript.ru/forum/misc/45065-udalit-iz-massiva-pustye-ehlementy.html)

рони 13.02.2014 22:08

Дзен-трансгуманист,
маленький универсальный преобразователь к одномерному виду :write: :dance:
function x(c) {
    for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
    return a
};
  alert([x([4]),x([4,5]),x([4,5,6]),x([4,5,6,7])])

Дзен-трансгуманист 13.02.2014 22:21

рони,
Чёто не то наворочено. :)

dima*** 13.02.2014 22:22

А разномерный массив-это правильно?

рони 13.02.2014 22:32

Цитата:

Сообщение от Дзен-трансгуманист
Чёто не то наворочено.

также выдаёт i или что-то нетак?
function m(c) {
    for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
    return a
};
  var i=[];
for (var x=0; x<5; x++) for (var y=0; y<6; y++) for (var z=0; z<7; z++) i.push(m([x,y,z]));
console.log(i.join(', '));

skrudjmakdak 13.02.2014 22:35

вот это действительно наркомания :)

dima*** 13.02.2014 22:41

массив с массивами...указательный массив.
В яваскрипте нет названия для такого массива?
Ссылочный массив пусть будет или тоже неправильно?
А то какая-то "непонятина" получается.

Дзен-трансгуманист 13.02.2014 22:41

Цитата:

Сообщение от dima***
А разномерный массив-это правильно?

Нет, это словесный каламбур. :)

Цитата:

Сообщение от рони
также выдаёт i или что-то нетак?

[4,5] - 29? Что не так? :D

Во-вторых, счет идет с нуля, последний индекс = размер-1.
Я там продемонстрировал, что приведенная в пример формула дает корректный порядок индексов. Естественно, последнее число было на единицу меньше общего размера.

И наконец, я бы даже не догадался, что эта функция должна вычислять размер, если бы начал читать тему с этой страницы. :) Что там за d = 5?

рони 13.02.2014 22:46

Цитата:

Сообщение от Дзен-трансгуманист
[4,5] - 29? Что не так

а что здесь неправильно? 5 * 6 = 30 -- от 0 до 29
Цитата:

Сообщение от Дзен-трансгуманист
Во-вторых, счет идет с нуля, последний индекс = размер-1

у меня всё тоже
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
</head>
<body>
<script>
  function m(c) {
    for (var d = 5, a = 0, b = 0; b < c.length; b++) a *= d, a += c[b], d++;
    return a
};
for (var x=0; x<5; x++) for (var y=0; y<6; y++) document.write('['+ x +','+ y +'] : '+m([x,y])+'<br>');
</script>
</body>
</html>

Дзен-трансгуманист 13.02.2014 23:21

Цитата:

Сообщение от рони
а что здесь неправильно?

Не понимаю, какая связь между [4,5] и 5*6
Обфускация концептуально необходима? :D

Дзен-трансгуманист 13.02.2014 23:23

// Multidimensional to single dimension representation

var m2sdim = ( function () {

  var argNames = 'abcdefghijklmnopqrstuvwxyz'.split('');

  return function ( /* arguments */ ) {

    var dimension = arguments.length;
    var fnSource = argNames[0];
    var size = +arguments[0];

    for ( var i = 1; i < dimension; i++ ) {
      fnSource = '(' + fnSource + '*' + +arguments[i] + '+ +' + argNames[i] + ')';
      size *= +arguments[i];
    }

    var fn = Function.apply( null, argNames.slice( 0, dimension ).concat( 'return ' + fnSource ));
    fn.size = size;

    return fn;
  };
})();

var test = m2sdim(5,6,7,8);

console.log([
  test.toString(),
  test(0,0,0,1),
  test(0,0,1,0),
  test(0,1,0,0),
  test(1,0,0,0),
  test.size // размер массива
].join('\n'));


Как можно догадаться, тут максимум на 26 измерений. Но для примера, думаю, достаточно. :)


Часовой пояс GMT +3, время: 16:59.