Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 32

Сравнивание массивов.Как можно сделать проще ?

26.03.2018, 14:04. Показов 640. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализовал метод richEquals,который принимает два параметра array1 {Array}
array2 {Array}.И возвращает булен равны ли массивы array1 и array2 между собой. При этом содержимое массива может быть разных типов, а сам массив в качестве элемента может быть другой массив либо объект. При проверке равенства объектов и массивов необходимо проверять значения.делать проверку по ссылке запрещено.

Пример массива:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var array1 = [
   null,
   "Marvel",
   "2.0.17",
   {
       name: "Hulk",
       color: "green",
       age: 31,
       abilities: ["crash", "smash"]
   },
   {
       name: "Iron Man",
       age: 35,
       stillAlive: true
   },
   ["Captain America", "Thor", "Captain Marvel"]
];
Сделал таким образом ,все работает.как можно сделать проще и красивей?
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
function compareObjects(obj1, obj2) {
    if ((typeof obj1 === "undefined" ? "undefined" : _typeof(obj1)) == (typeof obj2 === "undefined" ? "undefined" : _typeof(obj2))) {
        if (obj1 instanceof Object) {
            if (Object.keys(obj1).length == Object.keys(obj2).length) {
                for (var key in obj1) {
                    if (!(key in obj2) || !compareObjects(obj1[key], obj2[key])) {
                        return false;
                    }
                }
                return true;
            }
        } else {
            return obj1 == obj2;
        }
    }
    return false;
}
 
function richEquals(arr1, arr2) {
    if (arr1.length == arr2.length) {
        var pairs = arr1.map(function (item, index) {
            return [item, arr2[index]];
        });
        var _iteratorNormalCompletion = true;
        var _didIteratorError = false;
        var _iteratorError = undefined;
 
        try {
            for (var _iterator = pairs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
                var item = _step.value;
 
                if (!compareObjects(item[0], item[1])) {
                    return false;
                }
            }
        } catch (err) {
            _didIteratorError = true;
            _iteratorError = err;
        } finally {
            try {
                if (!_iteratorNormalCompletion && _iterator.return) {
                    _iterator.return();
                }
            } finally {
                if (_didIteratorError) {
                    throw _iteratorError;
                }
            }
        }
 
        return true;
    }
    return false;
}
 
var result = richEquals([null, "Marvel", "2.0.17", {
    name: "Hulk",
    color: "green",
    age: 31,
    abilities: ["crash", "smash"]
}, {
    name: "Iron Man",
    age: 35,
    stillAlive: true
}, ["Captain America", "Thor", "Captain Marvel"]], [null, "Marvel", "2.0.17", {
    name: "Hulk",
    color: "green",
    age: 31,
    abilities: ["crash", "smash"]
}, {
    name: "Iron Man",
    age: 35,
    stillAlive: true
}, ["Captain America", "Thor", "Captain Marvel"]]);
 
console.log(result);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2018, 14:04
Ответы с готовыми решениями:

можно сделать данную программу проще?как можно примитивней
Var F,x: real; Function ArcCos(z:Real):Real; begin if Round(z*10000000)=10000000 then ArcCos:=0 else if...

Страуструп. Сортировка трех чисел .Как сделать проще код без циклов и массивов?
Напишите программу. предлагающую пользователю ввести три целых числа, а затем выводит их в порядке возрастания, разделяя запятыми ....

Как можно сделать данный кусок кода меньше и проще?
Задние: Заменить все элементы с четными номерами на значение второго положительного элемента массива. void change() //замена элементов...

3
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
26.03.2018, 14:51
Такого рода функции уже написаны до вас. Например функция isEqual, которая делает как раз то, что вам нужно есть в библиотеках underscore или lodash. Если прям хотите свой код, то можете скачать библиотеку и посмотреть как они там это сделали.
1
0 / 0 / 0
Регистрация: 13.12.2017
Сообщений: 32
26.03.2018, 15:05  [ТС]
Wlkспасибо . понятно,что не хочу изобретать велосипед .. просто хотелось самому попрактиковаться .Скажите пожалуйста, правильно я имплементировал метод? или все же лучше воспользоваться isEqual?
0
90 / 90 / 48
Регистрация: 07.12.2011
Сообщений: 215
26.03.2018, 19:48
Попрактиковаться пожалуйста, это ок.
А юзать на практике в подавляющем большинстве случаев лучше библиотечные. Они оттестированы под разные сценарии, которые не факт что вы учли.

Ваш код не дебажил, конечно же. По структуре что-то похожее на правду. Использована рекурсия.
Кроме того ваш подход ограничен только массивами.

Прогнал по некоторым частным сценариям.
Несовпадения:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
console.log(_.isEqual([NaN], [NaN]));   // true
console.log(richEquals([NaN], [NaN]));  // false
 
 
var a = {};
a.b = a;
var b = {};
b.b = a;
 
console.log(_.isEqual([a], [b]));   // true
console.log(richEquals([a], [b]));  // Uncaught RangeError: Maximum call stack size exceeded
 
console.log(_.isEqual([{ a: () => {} }], [{ a:() => {} }]));   // false
console.log(richEquals([{ a: () => {} }], [{ a:() => {} }]));  // true
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.03.2018, 19:48
Помогаю со студенческими работами здесь

Оператор switch, можно ли сделать код проще?
Дана задача посчитать гласные в тексте введенном с клавиатуры, вопрос ниже... #include <iostream> #include <string> ...

можно ли сделать программу проще? стандартной склейкой слов
Задание: соединить слова. которые пользователь введет в консоль. можно как нибудь с помощью стандартных и простых методов это сделать? ...

Как сделать перемещение нескольких файлов с заменой? И как это сделать проще?
Как сделать перемещение нескольких файлов с заменой? Например я ввожу в текстбокс название файлов, потом эти файлы переношу в...

Как можно проще!
Как можно проще! У меня задача: Написать прогу, которая как можно проще будет конектится (через интернет) в базу (MySql) и читать ее....

можно написать ее как то проще ?
#include <stdio.h> #include <locale.h> #include <string> #include <conio.h> int main() { setlocale(LC_CTYPE, "rus"); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru