Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 15.09.2019, 21:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от xcube
Имеется 2 массива с объектами типа:

datas = [{name, price}] , [{name, price}];
datab = [{name, price2}] , [{name, price2}];

Извиняюсь за возможный кривой синтаксис - я новичок.
Нужно сравнить их, дедуплировать и соединить, что бы на выходе получилось:

dataz = [{name, price, price2}] , [{name, price, price2}]

name - совпадают, price - разные, но нужно их объединить.
нужны данные про ваши массивы datas, datab, и dataz
Ответить с цитированием
  #12 (permalink)  
Старый 15.09.2019, 21:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

xcube,
диалог в стиле: испорченный телефон.
Ответить с цитированием
  #13 (permalink)  
Старый 15.09.2019, 21:54
Интересующийся
Отправить личное сообщение для xcube Посмотреть профиль Найти все сообщения от xcube
 
Регистрация: 15.09.2019
Сообщений: 15

рони,

const data = [];
const datas = [];


iimPlayCode('WAIT SECONDS=1');
iimPlayCode('SET !TIMEOUT 10\nTAG POS=1 TYPE=LABEL FORM=ACTION:?act=vendors ATTR=TXT:Продажа');
iimPlayCode('SET !TIMEOUT 10\nTAG POS=1 TYPE=BUTTON FORM=ACTION:?act=vendors ATTR=TXT:выбрать');
iimPlayCode('WAIT SECONDS=1');

var buy = window.document.querySelectorAll(".table-sell td[data-label='Вещь']");
//var linkList = window.document.querySelectorAll(".table-sell td[class='price']");

for (var i = 0; i < buy.length; i++) {

var cName = buy[i].innerHTML.replace(/\s+/g, '');
var cPrice = buy[i].closest('tr').querySelector(".price").innerHTML.r eplace(/\s+/g, '');

var obj = {
name: cName, price: cPrice
}

data.push(obj);
}

window.console.log(data);

iimPlayCode('WAIT SECONDS=1');
iimPlayCode('SET !TIMEOUT 10\nTAG POS=1 TYPE=LABEL FORM=ACTION:?act=vendors ATTR=TXT:Покупка');
iimPlayCode('SET !TIMEOUT 10\nTAG POS=1 TYPE=BUTTON FORM=ACTION:?act=vendors ATTR=TXT:выбрать');
iimPlayCode('WAIT SECONDS=1');


var sell = window.document.querySelectorAll(".table-sell td[data-label='Вещь']");

for (var i = 0; i < sell.length; i++) {

var cName = sell[i].innerHTML.replace(/\s+/g, '');
var cPrice = sell[i].closest('tr').querySelector(".price").innerHTML.r eplace(/\s+/g, '');

var obj2 = {
name: cName, price: cPrice
}

datas.push(obj2);

}


window.console.log(data);
window.console.log(datas);


const dataz = Array.from(data, (v, i) => ({...v, ...datas[i]}));


window.console.log(dataz)


В целом - моя идея - найти все продажи (массив data), найти все покупки (массив datas), сравнить цены и если покупают дороже цены продажи - оповещать меня.

Последний раз редактировалось xcube, 15.09.2019 в 21:57.
Ответить с цитированием
  #14 (permalink)  
Старый 15.09.2019, 21:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

xcube,
ок нет у вас price2 -- тогда что хотите получить в dataz ?
Ответить с цитированием
  #15 (permalink)  
Старый 15.09.2019, 22:11
Интересующийся
Отправить личное сообщение для xcube Посмотреть профиль Найти все сообщения от xcube
 
Регистрация: 15.09.2019
Сообщений: 15

рони,
for (var i = 0; i < sell.length; i++) {

var cName2 = sell[i].innerHTML.replace(/\s+/g, '');
var cPrice2 = sell[i].closest('tr').querySelector(".price").innerHTML.r eplace(/\s+/g, '');

var obj2 = {
name: cName2, price: cPrice2
}

datas.push(obj2);

}

Так поровней? Хотя не работает(

Получается у меня сейчас:

data = [{cName, cPrice}]...
datas = [{cName2, cPrice2}]...
Ответить с цитированием
  #16 (permalink)  
Старый 15.09.2019, 22:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

xcube,
var obj2 = {
name: cName2, price2 сюда двойку: cPrice а не тут
}

var obj2 = {
name: cName2, price2: cPrice2
}
Ответить с цитированием
  #17 (permalink)  
Старый 15.09.2019, 22:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от xcube
сравнить цены
для варианта без двоек !!!
const datas = [{name : 1, price : 100} , {name : 2, price : 45}],
      datab = [{name : 1, price : 5} , {name : 2, price  : 33}],
      dataz = Array.from(datas, (v, i) => (v.price -= datab[i].price, v));
console.log(dataz)
в price будет разница цен.
Ответить с цитированием
  #18 (permalink)  
Старый 15.09.2019, 22:26
Интересующийся
Отправить личное сообщение для xcube Посмотреть профиль Найти все сообщения от xcube
 
Регистрация: 15.09.2019
Сообщений: 15

рони,
Работает! Но коряво. Суть в том, что cName и cName2 в 99% случаев располагаются в разных ячейках массива.
Вообще таблица продаж состоит из 500+ объектов, а таблица покупок из 40+
Получается нужно cName сравнить с cName2, если сходство, то добавлять к объекту2 + cPrice, что бы получилось: {имя, цена покупки, цена продажи} в одном объекте и ячейке ?
Как это можно реализовать? Пожалуйста
Ответить с цитированием
  #19 (permalink)  
Старый 15.09.2019, 22:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

xcube,
const datas = [{name : 1, price : 100} , {name : 2, price : 45}, {name : 3, price : 400}],
      datab = [{name : 1, price : 5} , {name : 2, price  : 33}],
      dataz = datab.map((v,i) => {
      const {name} = v , ob = datas.find(({name : k}) => k == name);
      if (ob) v.цена = ob.price;
      return v
      })


console.log(dataz)
Ответить с цитированием
  #20 (permalink)  
Старый 15.09.2019, 23:04
Интересующийся
Отправить личное сообщение для xcube Посмотреть профиль Найти все сообщения от xcube
 
Регистрация: 15.09.2019
Сообщений: 15

рони,
Оо супер! Тесты то, что надо!
Но, когда запускаю со своим - виснет imacros с браузером
Это из-за 500 объектов в массиве? или старой версии лисы и imacros может быть?

Последний раз редактировалось xcube, 15.09.2019 в 23:13.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Возникла проблема с анимацией кнопки после внедрения js кода! Помогите пожалуйста. DobrovolskyDen (X)HTML/CSS 0 08.05.2018 21:48
Помогите разобратся(работа с массивами JS)! Avanesyan Общие вопросы Javascript 2 15.01.2018 21:31
Помогите вынести js в отдельный скрипт pozitiv4ek Events/DOM/Window 9 15.01.2018 10:48
Помогите расшифровать JS pavdin Общие вопросы Javascript 24 01.04.2017 20:37
Помогите решить задачу с массивами! KaTaJLonec Общие вопросы Javascript 4 02.02.2015 00:25