Как выполнить математическую функцию, например разделить на два объекта js с разными свойствами

avatar
Clint_A
8 апреля 2018 в 07:54
973
2
-1

Скажем, у меня есть такой js-объект;

{'tv':390, 'table':200, 'cup':270, 'chair':325, 'door':300, 'books':290, 'radio':345}

и второй такой объект;

{0:30, 1:25, 2:20, 3:35, 4:30, 5:10, 6:15}

Как я могу, например, выполнить деление первого объекта на второй объект по ключу свойства? То есть {390/30, 200/25, 270/20, ... } Объекты имеют одинаковое количество свойств.

Источник
Mohammad Usman
8 апреля 2018 в 08:05
0

Ваш вывод выглядит как массив, а не как объект.

Clint_A
8 апреля 2018 в 08:13
0

Мне просто нужен был способ выполнить расчеты. Я могу легко преобразовать массив обратно в объект

Ответы (2)

avatar
mplungjan
8 апреля 2018 в 07:58
1

Вторым должен быть массив.

Однако я бы не стал доверять for-in, чтобы оставаться в порядке - хотя это работает:

var obj = {
  'tv': 390,
  'table': 200,
  'cup': 270,
  'chair': 325,
  'door': 300,
  'books': 290,
  'radio': 345
}
var divis = [30, 25, 20, 35, 30, 10, 15];
var cnt = 0;
for (var o in obj) {
  console.log(obj[o] / divis[cnt]);
  cnt++
}

// OR
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
  console.log(obj[keys[i]] / divis[i]);
}
avatar
Mark Schultheiss
8 апреля 2018 в 08:12
0

Поскольку вы использовали числа в качестве свойства второго объекта, вы должны ссылаться на него иначе, чем по имени. используйте second[0] или second["0"]

var object = {
  key: function(n) {
    return this[ Object.keys(this)[n] ];
  }
};

function key(obj, idx) {
  return object.key.call(obj, idx);
}

var items ={'tv':390, 'table':200, 'cup':270, 'chair':325, 'door':300, 'books':290, 'radio':345};
var second ={0:30, 1:25, 2:20, 3:35, 4:30, 5:10, 6:15};
console.log(second["0"]);
console.log(items.tv/second[0]);
console.log(items.table/second["1"]);
// using helper

var myindex = 4;
console.log(key(items,4)/key(second,4));
 console.log("using helper")
   var count = Object.keys(items).length;
// so loop as long as they have same length
for (var i = 0; i < count; i++) {
  console.log(key(items,i)/key(second,i));
}

Имена свойств должны быть строками. Это означает, что нестроковые объекты нельзя использовать в качестве ключей в объекте. Любой нестроковый объект, включая число, преобразуется в строку с помощью метода toString.

Clint_A
8 апреля 2018 в 08:16
0

Да, это может сработать, но я также искал динамическое решение, которое бы перебирало оба объекта.

Mark Schultheiss
8 апреля 2018 в 08:19
0

Это не то, о чем вы просили, я добавил дополнительное примечание, чтобы пояснить, почему.

Mark Schultheiss
8 апреля 2018 в 08:33
0

Обновлен с помощью метода ES6, если не использовать ключи объекта ES6, они могут не возвращаться в правильном порядке, а также они должны быть одинаковой длины (ключи объекта).