New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

count-objects

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

count-objects - npm Package Compare versions

Comparing version
1.1.11
to
1.2.0
+1
-1
package.json
{
"name": "count-objects",
"version": "1.1.11",
"version": "1.2.0",
"description": "Counts objects for each value",

@@ -5,0 +5,0 @@ "main": "src/index.js",

@@ -163,2 +163,33 @@ # count-objects

### filtersCount
```javascript
// returns how many objects were counted after implementing each filter:
const objects = [
{ a: 1, b: 2 },
{ a: 1, b: 2, c: 3 },
{ a: 1, b: 2, c: 3, d: 4 },
{ a: 1, b: 2, c: 3, d: 4, e: 5 },
{ a: 1 },
];
const co = new CountObjects(objects);
co.addFilter(["a", "1"]); // 5 objects
co.addFilter(["b", "2"]); // 4 objects
co.addFilter(["c", "3"]); // 3 objects
co.addFilter(["d", "4"]); // 2 objects
co.addFilter(["e", "5"]); // 1 object
console.log(co.filtersCount());
// [ 5, 4, 3, 2, 1 ]
co.clearFilters();
co.addFilter(["b", "2"]); // 4 objects
co.addFilter(["d", "4"]); // 2 objects
co.addFilter(["c", "3"]); // 2 objects
co.addFilter(["e", "5"]); // 1 object
co.addFilter(["a", "1"]); // 1 object
console.log(co.filtersCount());
/// [ 4, 2, 2, 1, 1 ]
```
### count unique values

@@ -165,0 +196,0 @@

@@ -121,20 +121,38 @@ const {

const intersectFilters = (union, filters) => {
const countPerFilter = (union, filters) => {
if (!filters.length) {
return null;
}
console.log(union);
const uniqueKeys = filters.map((filter) => {
return getUniqueKeys(union, filter);
});
console.log(uniqueKeys);
return uniqueKeys.map((obj) => Object.keys(obj).length);
};
const intersectFilters = (union, filters) => {
if (!filters.length) {
return { intersection: null, countIntersections: null };
}
const uniqueKeys = filters.map((filter) => {
return getUniqueKeys(union, filter);
});
// intersection of all the sets from left ot right
return uniqueKeys.reduce((acc, curr) => {
const intersectionArr = [uniqueKeys[0]];
const intersection = uniqueKeys.reduce((acc, curr) => {
const keys = Object.keys(acc);
const intersection = {};
const intersect = {};
for (const key of keys) {
if (curr[key] !== undefined) {
intersection[key] = true;
intersect[key] = true;
}
}
return intersection;
intersectionArr.push(intersect);
return intersect;
});
const countIntersections = intersectionArr.map(
(obj) => Object.keys(obj).length
);
return { intersection, countIntersections };
};

@@ -141,0 +159,0 @@

@@ -34,3 +34,3 @@ const { delimiter, uniqueKey, allObjects } = require("./constants");

return count(this.union, {
filter: intersectFilters(this.union, this.filters),
filter: intersectFilters(this.union, this.filters).intersection,
});

@@ -41,3 +41,3 @@ }

return table(this.union, {
filter: intersectFilters(this.union, this.filters),
filter: intersectFilters(this.union, this.filters).intersection,
});

@@ -67,2 +67,6 @@ }

}
filtersCount() {
return intersectFilters(this.union, this.filters).countIntersections;
}
}

@@ -69,0 +73,0 @@ module.exports = {

@@ -87,1 +87,24 @@ const { CountObjects } = require("./index");

console.log(co.getFilters());
const objects2 = [
{ a: 1, b: 2 },
{ a: 1, b: 2, c: 3 },
{ a: 1, b: 2, c: 3, d: 4 },
{ a: 1, b: 2, c: 3, d: 4, e: 5 },
{ a: 1 },
];
const co3 = new CountObjects(objects2);
co3.addFilter(["a", "1"]);
co3.addFilter(["b", "2"]);
co3.addFilter(["c", "3"]);
co3.addFilter(["d", "4"]);
co3.addFilter(["e", "5"]);
console.log(co3.filtersCount());
co3.clearFilters();
co3.addFilter(["b", "2"]);
co3.addFilter(["d", "4"]);
co3.addFilter(["c", "3"]);
co3.addFilter(["e", "5"]);
co3.addFilter(["a", "1"]);
console.log(co3.filtersCount());
const { expect } = require("chai");
const { users } = require("./data");
const { flatten, unflatten } = require("flat");

@@ -464,4 +462,5 @@ const {

};
const uniqueKeys = intersectFilters(union, []);
expect(uniqueKeys).to.be.null;
const { intersection, countIntersections } = intersectFilters(union, []);
expect(intersection).to.be.null;
expect(countIntersections).to.be.null;
return done();

@@ -488,4 +487,8 @@ });

const uniqueKeys = intersectFilters(union, filters);
expect(uniqueKeys).to.be.eql(expectedResult);
const { intersection, countIntersections } = intersectFilters(
union,
filters
);
expect(intersection).to.be.eql(expectedResult);
expect(countIntersections).to.be.eql([3]);

@@ -516,8 +519,40 @@ return done();

const uniqueKeys = intersectFilters(union, filters);
expect(uniqueKeys).to.be.eql(expectedResult);
const { intersection, countIntersections } = intersectFilters(
union,
filters
);
expect(intersection).to.be.eql(expectedResult);
expect(countIntersections).to.be.eql([5, 3]);
return done();
});
it("intersects multiple filters", (done) => {
const objects = [
{ index: 0, a: 1 },
{ index: 1, a: 1, b: 2 },
{ index: 2, a: 1, b: 2, c: 3 },
{ index: 3, a: 1, b: 2, c: 3, d: 4 },
{ index: 4, a: 1, b: 2, c: 3, d: 4, e: 5 },
];
const union = addArray({}, objects, { uniqueKey: "index" });
const filters = [
["a", "1"],
["b", "2"],
["c", "3"],
["d", "4"],
["e", "5"],
];
const { intersection, countIntersections } = intersectFilters(
union,
filters
);
expect(intersection).to.be.eql({ 4: true });
expect(countIntersections).to.be.eql([5, 4, 3, 2, 1]);
return done();
});
});
describe("CountObjects", () => {

@@ -524,0 +559,0 @@ describe("add", () => {

module.exports = {
users: [
{
id: 1,
name: "Leanne Graham",
username: "Bret",
email: "Sincere@april.biz",
address: {
street: "Kulas Light",
suite: "Apt. 556",
city: "Gwenborough",
zipcode: "92998-3874",
geo: {
lat: "-37.3159",
lng: "81.1496",
},
},
phone: "1-770-736-8031 x56442",
website: "hildegard.org",
company: {
name: "Romaguera-Crona",
catchPhrase: "Multi-layered client-server neural-net",
bs: "harness real-time e-markets",
},
},
{
id: 2,
name: "Ervin Howell",
username: "Antonette",
email: "Shanna@melissa.tv",
address: {
street: "Victor Plains",
suite: "Suite 879",
city: "Wisokyburgh",
zipcode: "90566-7771",
geo: {
lat: "-43.9509",
lng: "-34.4618",
},
},
phone: "010-692-6593 x09125",
website: "anastasia.net",
company: {
name: "Deckow-Crist",
catchPhrase: "Proactive didactic contingency",
bs: "synergize scalable supply-chains",
},
},
{
id: 3,
name: "Clementine Bauch",
username: "Samantha",
email: "Nathan@yesenia.net",
address: {
street: "Douglas Extension",
suite: "Suite 847",
city: "McKenziehaven",
zipcode: "59590-4157",
geo: {
lat: "-68.6102",
lng: "-47.0653",
},
},
phone: "1-463-123-4447",
website: "ramiro.info",
company: {
name: "Romaguera-Jacobson",
catchPhrase: "Face to face bifurcated interface",
bs: "e-enable strategic applications",
},
},
{
id: 4,
name: "Patricia Lebsack",
username: "Karianne",
email: "Julianne.OConner@kory.org",
address: {
street: "Hoeger Mall",
suite: "Apt. 692",
city: "South Elvis",
zipcode: "53919-4257",
geo: {
lat: "29.4572",
lng: "-164.2990",
},
},
phone: "493-170-9623 x156",
website: "kale.biz",
company: {
name: "Robel-Corkery",
catchPhrase: "Multi-tiered zero tolerance productivity",
bs: "transition cutting-edge web services",
},
},
{
id: 5,
name: "Chelsey Dietrich",
username: "Kamren",
email: "Lucio_Hettinger@annie.ca",
address: {
street: "Skiles Walks",
suite: "Suite 351",
city: "Roscoeview",
zipcode: "33263",
geo: {
lat: "-31.8129",
lng: "62.5342",
},
},
phone: "(254)954-1289",
website: "demarco.info",
company: {
name: "Keebler LLC",
catchPhrase: "User-centric fault-tolerant solution",
bs: "revolutionize end-to-end systems",
},
},
{
id: 6,
name: "Mrs. Dennis Schulist",
username: "Leopoldo_Corkery",
email: "Karley_Dach@jasper.info",
address: {
street: "Norberto Crossing",
suite: "Apt. 950",
city: "South Christy",
zipcode: "23505-1337",
geo: {
lat: "-71.4197",
lng: "71.7478",
},
},
phone: "1-477-935-8478 x6430",
website: "ola.org",
company: {
name: "Considine-Lockman",
catchPhrase: "Synchronised bottom-line interface",
bs: "e-enable innovative applications",
},
},
{
id: 7,
name: "Kurtis Weissnat",
username: "Elwyn.Skiles",
email: "Telly.Hoeger@billy.biz",
address: {
street: "Rex Trail",
suite: "Suite 280",
city: "Howemouth",
zipcode: "58804-1099",
geo: {
lat: "24.8918",
lng: "21.8984",
},
},
phone: "210.067.6132",
website: "elvis.io",
company: {
name: "Johns Group",
catchPhrase: "Configurable multimedia task-force",
bs: "generate enterprise e-tailers",
},
},
{
id: 8,
name: "Nicholas Runolfsdottir V",
username: "Maxime_Nienow",
email: "Sherwood@rosamond.me",
address: {
street: "Ellsworth Summit",
suite: "Suite 729",
city: "Aliyaview",
zipcode: "45169",
geo: {
lat: "-14.3990",
lng: "-120.7677",
},
},
phone: "586.493.6943 x140",
website: "jacynthe.com",
company: {
name: "Abernathy Group",
catchPhrase: "Implemented secondary concept",
bs: "e-enable extensible e-tailers",
},
},
{
id: 9,
name: "Glenna Reichert",
username: "Delphine",
email: "Chaim_McDermott@dana.io",
address: {
street: "Dayna Park",
suite: "Suite 449",
city: "Bartholomebury",
zipcode: "76495-3109",
geo: {
lat: "24.6463",
lng: "-168.8889",
},
},
phone: "(775)976-6794 x41206",
website: "conrad.com",
company: {
name: "Yost and Sons",
catchPhrase: "Switchable contextually-based project",
bs: "aggregate real-time technologies",
},
},
{
id: 10,
name: "Clementina DuBuque",
username: "Moriah.Stanton",
email: "Rey.Padberg@karina.biz",
address: {
street: "Kattie Turnpike",
suite: "Suite 198",
city: "Lebsackbury",
zipcode: "31428-2261",
geo: {
lat: "-38.2386",
lng: "57.2232",
},
},
phone: "024-648-3804",
website: "ambrose.net",
company: {
name: "Hoeger LLC",
catchPhrase: "Centralized empowering task-force",
bs: "target end-to-end models",
},
},
],
};