Find In Object with different structures

Benchmark created on


Setup

var structure1 = [
    {
        headers: [{
            key: 'key1',
            value: 'value1'
        },
        {
            key: 'key2',
            value: 'value2'
        }]
    },
    {
        headers: [{
            key: 'key3',
            value: 'value3'
        }]
    },
    {
        headers: [{
            key: 'key4',
            value: 'value4'
        },
        {
            key: 'key5',
            value: 'value5'
        },
        {
            key: 'key6',
            value: 'value6'
        }]
    }
]

var structure2 = [
    {
        headers: [{
            'key1': 'value1'
        },
        {
            'key2': 'value2'
        }]
    },
    {
        headers: [{
            'key3': 'value3'
        }]
    },
    {
        headers: [{
            'key4': 'value4'
        },
        {
            'key5': 'value5'
        },
        {
            'key6': 'value6'
        }]
    }
]

var structure3 = [
    {
        headers: [
            ['key1', 'value1'],
            ['key2', 'value2'],
        ]
    },
    {
        headers: [
            ['key3', 'value3'],
        ]
    },
    {
        headers: [
            ['key4', 'value4'],
            ['key5', 'value5'],
            ['key6', 'value6'],
        ]
    }
]

var structure4 = [
    {
        headers: [
            'key1_value1',
            'key2_value2',
        ]
    },
    {
        headers: [
            'key3_value3',
        ]
    },
    {
        headers: [
            'key4_value4',
            'key5_value5',
            'key6_value6',
        ]
    }
]

var structure5 = [
    {
        headers: 'key1_value1,key2_value2'
    },
    {
        headers: 'key3_value3'
    },
    {
        headers: 'key4_value4,key5_value5,key6_value6'
    },
]

Test runner

Ready to run.

Testing in
TestOps/sec
Structure 1
function find1(key, value) {
	return structure1.find(item => {
		return item.headers.some(header => header.key === key && header.value === value)
	})
}


find1('key1','value1');
find1('key5','value5');
find1('key3','value3');
find1('undefined','undefined');
ready
Structure 2
function find2(key, value) {
	return structure2.find(item => {
		return item.headers.some(header => header[key] === value)
	})
}


find2('key1','value1');
find2('key5','value5');
find2('key3','value3');
find2('undefined','undefined');
ready
Structure 3
function find3(key, value) {
	return structure3.find(item => {
		return item.headers.some(header => header[0] === key && header[1] === value)
	})
}


find3('key1','value1');
find3('key5','value5');
find3('key3','value3');
find3('undefined','undefined');
ready
Structure 4
function find4(key, value) {
	const r = key + '_' + value
	return structure4.find(item => {
		return item.headers.some(header => header === r)
	})
}


find4('key1','value1');
find4('key5','value5');
find4('key3','value3');
find4('undefined','undefined');
ready
Structure 5
function find5(key, value) {
	const r = new RegExp('(,|^)' + key + '_' + value + '(,|$)')
	return structure5.find(item => {
		return r.test(item.headers)
	})
}


find5('key1','value1');
find5('key5','value5');
find5('key3','value3');
find5('undefined','undefined');
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.