Удалить определенное содержимое из объекта json, используя другой объект json

Личный опыт работы с PostgreSQL, все еще ждущий более быстрый способ.

1. Сначала создайте скелет таблицы, если файл хранится локально:

    drop table if exists ur_table;
    CREATE TABLE ur_table
    (
        id serial NOT NULL,
        log_id numeric, 
        proc_code numeric,
        date timestamp,
        qty int,
        name varchar,
        price money
    );
    COPY 
        ur_table(id, log_id, proc_code, date, qty, name, price)
    FROM '\path\xxx.csv' DELIMITER ',' CSV HEADER;

2. Когда \ path \ xxx.csv находится на сервере, postgreSQL не имеет права доступа к серверу, вам придется импортировать CSV-файл через встроенные функции pgAdmin.

Щелкните правой кнопкой мыши имя таблицы выберите импорт.

Если у вас все еще есть проблемы, обратитесь к этому руководству. http://www.postgresqltutorial.com/import-csv-file-into-posgresql-table/

1
задан Curr195 26 March 2019 в 13:36
поделиться

6 ответов

Вы можете уменьшить ваш объект1 и использовать команду find тоже, чтобы увидеть, входят ли числа в объект1

var object1 = [{"appid":1111,"test":0,"low":2131},{"appid":1234,"test":0,"low":2684},{"appid":4214,"test":0,"low":6345}];

var object2 = [{"appid":1234}];

var object3 = object1.reduce((ac, v, i) => {
  return object2.find(function(obj) {
    return obj.appid == v.appid;
  }) ? ac :  [...ac, v];
}, [])

console.log(object3)

0
ответ дан R3tep 26 March 2019 в 13:36
поделиться

Вы можете добиться этого, используя комбинацию функций Array.filter и Array.findIndex

var object1 = [{"number":1111,"test":0,"low":2131},{"number":1234,"test":0,"low":2684},{"number":4214,"test":0,"low":6345}];

var object2 = [{"number":1234,"test":0,"low":2684}];


var result = object1.filter(function(obj1){

    return object2.findIndex(function(obj2){
        return obj2.number == obj1.number ;
    }) ==-1;

});

console.log(result)

0
ответ дан Serene Abraham Mathew 26 March 2019 в 13:36
поделиться
let object1 = [{ "number": 1111, "test": 0, "low": 2131 }, { "number": 1234, "test": 0, "low": 2684 }, { "number": 4214, "test": 0, "low": 6345 }];
let object2 = [{ "number": 1234, "test": 0, "low": 2684 }];

// use unique key to findIndex, am using number key here replace this in your case.
object1 = object1.filter(obj => {
    return object2.findIndex(obj1 => {
        return obj.number === obj1.number;
    }) === -1;
});
0
ответ дан Boobalan 26 March 2019 в 13:36
поделиться

Вам нужна функция для сравнения двух объектов, затем вы можете отфильтровать найденные объекты:

var object1 = [{"number":1111,"test":0,"low":2131},{"number":1234,"test":0,"low":2684},{"number":4214,"test":0,"low":6345}];
var object2 = [{"number":1234,"test":0,"low":2684}];

const objectsEqual = (o1, o2) =>
    Object.keys(o1).length === Object.keys(o2).length 
        && Object.keys(o1).every(p => o1[p] === o2[p]);

var res = object1.filter(o1 => !object2.some(o2 => objectsEqual(o1, o2)));

console.log(res);

Если [ 112] - это уникальный идентификатор объекта, который вы можете просто отфильтровать:

var object1 = [{"number":1111,"test":0,"low":2131},{"number":1234,"test":0,"low":2684},{"number":4214,"test":0,"low":6345}];
var object2 = [{"number":1234,"test":0,"low":2684}];

var res = object1.filter(o1 => !object2.some(o2 => o1.number === o2.number));

console.log(res);

0
ответ дан ttulka 26 March 2019 в 13:36
поделиться

Вот как это можно сделать, используя функцию differenceWith от lodash:

let difference = _.differenceWith(object1, object2, (obj1, obj2) => {
   return obj1.number === obj2.number
})

0
ответ дан User97 26 March 2019 в 13:36
поделиться

Вот еще один вариант удаления всех объектов из массива object1, которые соответствуют одному или нескольким атрибутам из объектов в object2.

var object1 = [{"number":1111,"test":0,"low":2131},{"number":1234,"test":0,"low":2684},{"number":4214,"test":0,"low":6345}],
    object2 = [{"number":1234}];

console.log(
  object1.filter(obj1 => {
    return !object2.some(obj2 => {
      for (let attrName in obj1) {
        if (obj1[attrName] === obj2[attrName]) return true;
      }
      return false;
    });
  })
);

// this can be reduced to the following if you don't want to look through
// all attributes, but only a predefined attribute

console.log(
  object1.filter(obj1 => !object2.some(obj2 => obj1.number === obj2.number))
);

0
ответ дан 3limin4t0r 26 March 2019 в 13:36
поделиться
Другие вопросы по тегам:

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