Личный опыт работы с 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 и использовать команду 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)
Вы можете добиться этого, используя комбинацию функций 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)
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;
});
Вам нужна функция для сравнения двух объектов, затем вы можете отфильтровать найденные объекты:
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);
Вот как это можно сделать, используя функцию differenceWith
от lodash:
let difference = _.differenceWith(object1, object2, (obj1, obj2) => {
return obj1.number === obj2.number
})
Вот еще один вариант удаления всех объектов из массива 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))
);