我有一個陣列
const dataCheck = ["Rohit","Ravi"];
我有另一個物件陣列
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
我想檢查 userData 中是否存在 dataCheck 中的任何值,然后回傳一個包含以下資料的新陣列
const newData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit", status: "present" },
{ name: "Ravi", status: "present" },
];
我嘗試使用回圈做某事但沒有得到預期的結果
const dataCheck = ["Rohit", "Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" }
];
let newDataValue = {};
let newData = [];
userData.forEach((user) => {
const name = user.name;
dataCheck.forEach((userName) => {
if (name === userName) {
newDataValue = {
name: name,
status: "present"
};
} else {
newDataValue = {
name: name
};
}
newData.push(newDataValue);
});
});
console.log(newData);
我的試驗給了我重復的結果,多個結果只是重復的
uj5u.com熱心網友回復:
你應該使用map()和一個Set.
const dataCheck = ["Rohit","Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
const set = new Set(dataCheck);
const output = userData.map(data => set.has(data.name) ? ({...data, status: "present"}): data)
console.log(output)
.as-console-wrapper { max-height: 100% !important; top: 0; }
ASet允許O(1)及時查找,因此該演算法O(n)及時作業。如果您將使用該陣列進行查找(例如使用indcludes()等find()),則運行時將是O(n2). 雖然這對于如此小的陣列肯定無關緊要,但陣列越大,它就會變得越重要。
map()在這里使用是因為您想要1:1輸入到輸出的映射。那么唯一要確定的是,輸出應該是什么。如果值不在 中,它要么是輸入,要么是由一個設定為Set的屬性擴展的輸入。您可以使用該方法檢查 a 中的存在,并可以使用來決定它是哪種情況。status"present"Sethas()ternary operator ?
uj5u.com熱心網友回復:
const dataCheck = ["Rohit", "Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
// map through every object and check if name property
// exists in data check with help of filter.
// if it exists the length of filter should be 1 so
// you should return { name: el.name, status: "present" } else
// return { name: el.name }
let newData = userData.map((el) => {
if (dataCheck.filter((name) => name === el.name).length > 0) {
return { name: el.name, status: "present" };
} else {
return { name: el.name };
}
});
console.log("newdata: ", newData);
uj5u.com熱心網友回復:
更好的方法是使用mapoveruserData陣列,查找匹配元素 in dataCheck,如果找到回傳匹配元素 狀態鍵,或者直接回傳找到的元素。
const dataCheck = ["Rohit","Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
const getUpdatedObject = () => {
return userData.map(userData => {
const userDetail = dataCheck.find(data => userData.name === data);
if(userDetail) return {userDetail, status:"present"}
else return {...userData}
});
}
console.log(getUpdatedObject())
作業小提琴
uj5u.com熱心網友回復:
回圈userData,檢查名稱是否包含在dataCheck. 如果true添加狀態“存在”。
const dataCheck = ["Rohit","Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
for (let user of userData) {
if(dataCheck.includes(user.name)) {
user.status = 'present'
}
}
console.log(userData)
uj5u.com熱心網友回復:
由于第二個回圈,您會看到重復的結果,dataCheck.forEach((userName) => {因為每個回圈dataCheck都會觸發 if/else 陳述句并向最終陣列添加一些內容。無論您添加多少值,您dataCheck都會獲得多少重復項。
只需要遍歷一個陣列并檢查該值是否在另一個陣列中,這樣就不會添加重復項。
const dataCheck = ["Rohit", "Ravi"];
const userData = [{ name: "Sagar" }, { name: "Vishal" }, { name: "Rohit" }, { name: "Ravi" }];
let newDataValue = {};
let newData = [];
// loop thru the users
userData.forEach((user) => {
// set the user
const name = user.name;
// check if in array
if (dataCheck.indexOf(name) >= 0) {
newDataValue = {
name: name,
status: "present",
};
}
// not in array
else {
newDataValue = {
name: name,
};
}
newData.push(newDataValue);
});
console.log(newData);
uj5u.com熱心網友回復:
所以你會這樣做:
const dataCheck = ["Rohit","Ravi"];
const userData = [
{ name: "Sagar" },
{ name: "Vishal" },
{ name: "Rohit" },
{ name: "Ravi" },
];
const newUserData = userData.map( user => {
dataCheck.forEach( data => {
if( data === user.name )
user.status = "present";
});
return user;
} );
console.log( newUserData );
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/482092.html
標籤:javascript 节点.js 数组 反应 json
