我有以下数据收集
[{
id: '1',
date: '2017-01-01',
value: 2
},
{
id: '2',
date: '2017-01-02',
value: 3
},
{
id: '3',
value: 3
},
id: '4',
date: '2017-01-02',
value: 3
}]
我想删除任何不具有'date'属性的对象。在上面的示例中,应删除ID为3的对象。
完成的对象应该看起来像这样
[{
id: '1',
date: '2017-01-01',
value: 2
},
{
id: '2',
date: '2017-01-02',
value: 3
},
id: '4',
date: '2017-01-02',
value: 3
}]
我试图用lodash查找和删除一个未定义的值。这是行不通的。该对象看上去与输入时完全一样。
_.each(obj, (val) => {
_.remove(val, value => value['XXX-BUDAT'] === undefined);
});
如何为此目的使用lodash?
预先感谢
答案 0 :(得分:2)
您可以使用.filter()
,Object.keys()
和.includes()
let input = [
{ id: '1', date: '2017-01-01', value: 2},
{ id: '2', date: '2017-01-02', value: 3},
{ id: '3', value: 3 },
{ id: '4', date: '2017-01-02', value: 3 }
]
let output = input.filter(obj => Object.keys(obj).includes("date"));
console.log(output);
答案 1 :(得分:2)
您可以filter
基于该属性的数组,如下所示:
const initial = [{
id: '1',
date: '2017-01-01',
value: 2
},
{
id: '2',
date: '2017-01-02',
value: 3
},
{
id: '3',
value: 3
}, { // this left curly brace was missing!, check that out
id: '4',
date: '2017-01-02',
value: 3
}
];
const finalR = initial.filter((obj) => obj.hasOwnProperty('date') && !!obj.date);
console.log(finalR);
答案 2 :(得分:2)
您可以使用public static byte[] GenerateSalt()
{
using (var randomNumberGenerator = new RNGCryptoServiceProvider())
{
var salt = new byte[32];
randomNumberGenerator.GetBytes(salt);
return salt;
}
}
public static byte[] HashPassword(byte[] password, byte[] salt, int iterations)
{
using (var rfc2898 = new Rfc2898DeriveBytes(password, salt, iterations))
{
return rfc2898.GetBytes(32);
}
}
public static bool CompareByteArrays(byte[] array1, byte[] array2)
{
if (array1.Length != array2.Length)
{
return false;
}
for (int i = 0; i < array1.Length; i++)
{
if (array1[i] != array2[i])
{
return false;
}
}
return true;
}
和Array#filter
来这样做:
Object#hasOwnProperty
可以使用箭头功能将其缩短:
var newArray = oldArray.filter(function(obj) {
return obj.hasOwnProperty("date");
});
Lodash解决方案:
var newArray = oldArray.filter(obj => obj.hasOwnProperty("date"));
示例:
var newArray = _.filter(oldArray, obj => _.has(obj, "date"));
答案 3 :(得分:1)
您可以使用Array.prototype.filter
。此外,您可以使用ES6对象分配解构来使其简洁:
x <- rnorm(30)
median(x) # -0.01192347
# does not match:
do.call("median",as.list(x)) # -1.912244
答案 4 :(得分:0)
首先,您的对象数组无效,请通过将最后一个对象元素与前面的花括号{
包装在一起来解决此问题。请参见Array.prototype.filter()和Object.prototype.hasOwnProperty(),将检查您当前的对象项是否具有date
键?如果有,它将以其他方式返回该对象,否则该项将不会返回。
var array_of_object = [{
id: '1',
date: '2017-01-01',
value: 2
},
{
id: '2',
date: '2017-01-02',
value: 3
},
{
id: '3',
value: 3
},
{ //missing brace here
id: '4',
date: '2017-01-02',
value: 3
}
];
function filterByValue(item) {
return item.hasOwnProperty('date');
}
var arrByID = array_of_object.filter(filterByValue);
console.log(arrByID);
答案 5 :(得分:0)
这是本机javascript解决方案:
var arr = [
{id: '1', date: '2017-01-01', value: 2},
{id: '2', date: '2017-01-02', value: 3},
{id: '3', value: 3},
{id: '4', date: '2017-01-02', value: 3}
]
for(var i = 0; i < arr.length; i++) {
if(!arr[i].hasOwnProperty("date")) {
arr.splice(i,1);
}
}
console.log(arr);