gpt4 book ai didi

Javascript - 动态构建条件

转载 作者:行者123 更新时间:2023-11-29 19:05:07 25 4
gpt4 key购买 nike

我创建了一个名为 unique() 的通用函数 来从特定数组中删除重复项。

但是我遇到了一个问题:我想根据传递给 function 的属性动态构建条件。

Ex:假设我想传递 2 个属性,所以我想在“删除”该重复对象之前检查这 2 个属性。

目前我正在使用 eval()建立这个条件“&&”,但是根据我的搜索,这确实是一个不好的做法。

所以,我的问题是:

做这种事情的正确方法是什么?

下面是我当前的代码:

function unique(arr, ...props) {
const conditions = [];
for (let prop of props) {
conditions.push(`element['${prop}'] === elem['${prop}']`);
}
const condStr = conditions.join(' && ');

return arr.filter((element, index) => {
const idx = arr.findIndex((elem) => {
return eval(condStr);
});

return idx === index;
});
}

const arr1 = [{
id: 1,
name: 'Josh',
description: 'A description'
}, {
id: 2,
name: 'Hannah',
description: 'A description#2'
}, {
id: 1,
name: 'Josh',
description: 'A description#3'
}, {
id: 5,
name: 'Anyname',
description: 'A description#4'
}];

const uniqueValues = unique(arr1, 'id', 'name');
console.log('uniqueValues', uniqueValues);

最佳答案

就实现细节而言,这个问题有点主观,但如果你问我更好的方法是传入一个回调函数以交给过滤器。

通过这种方式,您可以按照自己认为合适的方式组合函数。如果您有一组复杂的条件,您可以在将其传递到您的独特函数之前使用组合在函数中构建条件 https://hackernoon.com/javascript-functional-composition-for-every-day-use-22421ef65a10

A key to function composition is having functions that are composable. A composable function should have 1 input argument and 1 output value.

hackernoon 文章非常好,而且深入得多。

这将返回一个应用所有先决条件的函数

function unique(arr, callback) {
return arr.filter(callback);
}

const compose = (...functions) => data =>
functions.reduceRight((value, func) => func(value), data)

unique(
[1, 3, 4, 5 ,7, 11, 19teen]
compose(
(someStateCondition) => { /** return true or false **/ },
(result) => { /** return result === someOtherStateCondition **/}
)
)

关于Javascript - 动态构建条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43549680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com