我有一个带有重复项的对象数组,我正在尝试获得一个唯一的列表,其中唯一性由对象属性的子集定义.例如,
{a:"1",b:"1",c:"2"}
Run Code Online (Sandbox Code Playgroud)
我想c在唯一性比较中忽略.
我可以做点什么
_.uniq(myArray,function(element) { return element.a + "_" + element+b});
Run Code Online (Sandbox Code Playgroud)
我希望我能做到
_.uniq(myArray,function(element) { return {a:element.a, b:element.b} });
Run Code Online (Sandbox Code Playgroud)
但这不起作用.是否有类似我可以做的事情,或者如果我正在比较多个属性,我是否需要创建对象的可比表示?
我正在查看Underscore和Lodash库之间的差异,我遇到了一个关于_.each/_.forEach的问题.
在Underscore中,_.each函数不能突破循环.当使用return false时,它只能作为"continue"语句使用.(这是我的预期功能)=它强制进行循环的下一次迭代,跳过其间的任何代码.
另一方面,在Lodash中,返回false告诉_.forEach()该迭代将是最后一次.有没有办法让Lodash中的"继续"行为也起作用?
谢谢.
我有一个对象数组,如下所示:
var data = [{costOfAirtickets: 2500, costOfHotel: 1200},{costOfAirtickets: 1500, costOfHotel: 1000}]
Run Code Online (Sandbox Code Playgroud)
我想对数组中的每个元素求和,以产生如下数组:
var result = [{costOfAirtickets: 4000, costOfHotel: 3200}]
Run Code Online (Sandbox Code Playgroud)
我使用了map和reduce函数,但我只能将一个单独的元素求和:
data.map(item => ite.costOfAirtickets).reduce((prev, next)=>prev + next); // 22
Run Code Online (Sandbox Code Playgroud)
目前这产生了一个单独的值,这不是我想要的初始解释.
有没有办法在Javascript或可能与lodash这样做.
是否有方法或方法链来检查lodash中可用的对象中是否存在密钥数组,而不是使用以下内容?
var params = {...}
var isCompleteForm = true;
var requiredKeys = ['firstname', 'lastname', 'email']
for (var i in requiredKeys) {
if (_.has(params, requiredKeys[i]) == false) {
isCompleteForm = false;
break;
}
}
if (isCompleteForm) {
// do something fun
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
谢谢大家的精彩解决方案!如果您有兴趣,这里是不同解决方案的jsPerf.
如何用另一个字符串替换字符串中每个字符串模式的出现?
var text = "azertyazerty";
_.replace(text,"az","qu")
Run Code Online (Sandbox Code Playgroud)
返回 quertyazerty
我正在使用_.isEqual来比较2个对象数组(例如:每个对象有10个属性),并且它工作正常.
现在有2个属性(创建和删除),我不需要成为比较的一部分.
例:
var obj1 = {name: "James", age: 17, creation: "13-02-2016", deletion: "13-04-2016"}
var obj2 = {name: "Maria", age: 17, creation: "13-02-2016", deletion: "13-04-2016"}
// lodash method...
_.isEqual(firstArray, secondArray)
Run Code Online (Sandbox Code Playgroud) 我想弄清楚Lodash iteratee是如何工作的以及我将在哪里使用它.
文件说:
创建一个函数,该函数使用创建函数的参数调用func.如果func是属性名称,则created函数返回给定元素的属性值.如果func是数组或对象,则创建的函数对包含等效源属性的元素返回true,否则返回false.
这是文档中的一个例子,但是我在绕过这个问题时遇到了一些麻烦.
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
// The `_.matches` iteratee shorthand.
_.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
// => [{ 'user': 'barney', 'age': 36, 'active': true }]
Run Code Online (Sandbox Code Playgroud) 当我传递“desc”时,当我调用该函数时,Lodash 中的 sortBy() 不会按降序排序const sortedData = _.sortBy(data, ['rawAvgPrice'], ['desc']);。这对于升序来说效果很好。但不是按降序排列。我已经发布了我编写的排序功能。我读了主题“ lodash multi-column sortByscending ”,但它并没有帮助我解决我的问题。因此决定发布此内容。
/**
* @param {String} element - sorting object element name.
* @param {String} dir - the direction of the sort ASC/DESC.
* @param {Boolean} flag - Signaling to sort the table and update.
*/
sortTableNew(element, dir, flag) {
let direction = dir;
// Change the sorting from ASC to DESC/ DESC to ASC
if (flag) {
direction = dir === 'asc' ? 'desc' : 'asc'; …Run Code Online (Sandbox Code Playgroud) 我将使用forOwn迭代对象的属性并手动创建一个数组,并且无法帮助认为已经有一个oneliner已经可用.
{
prop1 : "value",
prop2: { sub:1}
}
Run Code Online (Sandbox Code Playgroud)
至:
[
{key: "prop1", value: "value"},
{key: "prop2", value: {sub:1}}
]
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试throttle在功能组件中使用lodash中的方法,例如:
const App = () => {
const [value, setValue] = useState(0)
useEffect(throttle(() => console.log(value), 1000), [value])
return (
<button onClick={() => setValue(value + 1)}>{value}</button>
)
}
Run Code Online (Sandbox Code Playgroud)
由于内部方法useEffect在每次渲染时都会重新声明,因此限制效果不起作用。
有没有人有一个简单的解决方案?
lodash ×10
javascript ×8
arrays ×2
each ×1
foreach ×1
react-hooks ×1
reactjs ×1
sorting ×1
string ×1
throttling ×1
unique ×1
vue.js ×1