我想知道如何通过对象属性和值从数组中提取单个对象, 以下内容:
let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}]
let Obj = arr.pop({night:true})
// obj: {temp:12, night: true}
// arr now: [{temp:36, night: false}, {temp:24, night: true}]
有什么建议吗?
答案 0 :(得分:0)
创建自己的函数,迭代目标数组,并拼接到新数组
function removeElements(arr, prop, value) {
let poppedElems = [];
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i].hasOwnProperty(prop) && arr[i][prop] === value) {
poppedElems = poppedElems.concat(arr.splice(i, 1));
}
}
return poppedElems
}
如果您只想要第一个:
function findElement(arr, prop, value) {
let elem = null;
let elemIndex = arr.findIndex(x => x.hasOwnProperty(prop) && x[prop] === value);
if (elemIndex !== -1) {
elem = arr.splice(elemIndex, 1)[0];
}
return elem;
}
答案 1 :(得分:0)
splice
删除表格数组并打破循环
let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}],
test = {night:true};
required = null;
function doTheStuff(obj, arr){
for(var i=0; i<arr.length; i++){
if(arr[i].night == test.night){
required = arr[i]
arr.splice(i,1);
break;
}
}
}
doTheStuff(test,arr)
console.log("required" , required)
console.log("arr", arr)
&#13;
答案 2 :(得分:0)
使用以下数组:
let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}];
最简单的方法是使用 findIndex()方法。
返回night为false的第一个元素:
let index = arr.findIndex(elem => !elem.night);
// index = 0
返回night为true的第一个元素:
let index = arr.findIndex(elem => elem.night)
// index = 1
然后获取元素:
let obj = arr[index];
答案 3 :(得分:-1)
您可能希望使用 String[] strs = {"a","a","a"};
boolean isAllEqual = Arrays.stream(strs).allMatch(e->e.equals("a"));
System.out.println(isAllEqual);
,它会找到满足所提供测试功能的第一个元素的索引。 findIndex
也可以使用,但是您不知道它在数组中的位置,因此如果需要,您无法删除它。 find
允许您将参数传递到bind
,这样您就可以选择属性和搜索值,而无需编写更多函数。
一个工作的例子是
findMatch
答案 4 :(得分:-1)
您find
方法获取第一个night: false
let arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}]
arr = arr.find(a => !a.night)
console.log(JSON.stringify(arr))
答案 5 :(得分:-1)
最初误解了这个问题。修改后的答案尽可能简洁:
var arr = [{temp:36, night: false}, {temp:12, night: true}, {temp:24, night: true}];
let obj;
var key = 'night';
var value = true;
for(var item in arr){
if(arr[item][key]==value){
obj = arr[item];
arr.splice(item,1);
break;
}
}