سلام.
توی یکی از صفحات کاربر میتونه چند تا روز هفته رو انتخاب کنه و با زدن دکمه سیو اون رو ذخیره کنه. دفعه بعد که کاربر میاد و صفحشو باز میکنه باید اون روزهایی که انتخاب کرده رو بهش نمایش بدیم..
مشکل من اینه که value برای روزهای هفته اعدادد باینری هست و برای فرستادن به سرور باید مجموع جمع باینریشونو بفرستیم. value برای روزهای هفته هست :
SUNDAY: 0x0001,
MONDAY: 0x0002,
TUESDAY: 0x0004,
WEDNESDAY: 0x0008,
THURSDAY: 0x0010,
FRIDAY: 0x0020,
SATURDAY: 0x0040
حالا فرض کنید کاربر Sunday Friday Saturday رو انتخاب کنه. مجموع جمع باینریشون میشه 97 که اون رو میفرستیم سمت سرور. برای نمایش روزهای انتخاب شده برای بار بعد سرور 97 رو برمیگردونه.. حالا باید چه کنم که به سه تا عدد 0x0001 و 0x0020 و 0x0040 رسید تا روزهای Sunday Friday Saturday رسید ؟ ممنون میشم کمکم کنید.
@kamran.davar
@milad یه راه ساده تر هم هست. تصادفا فهمیدم که مثلا 97 رو اگر با ولیو روزهای هفته and کنیم فقط وقتی مقدار اون بزرگتر از 0 هست که اون ولیو تشکیل دهنده جمعش باشه. و با این منطق و کد زیر مشکلم حل شد. و نیاز به هیچ تبدیلی هم نبود
let weekDaysSum = props.selectedCampaignDetailData.weekDays
let selectedWeekDays = [];
let weekDaysTemp = [0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040]
if (weekDaysSum && weekDaysSum > 0) {
for (let index = 0; index < weekDaysTemp.length; index++) {
//const element = array[index];
if (weekDaysSum & weekDaysTemp[index]) {
selectedWeekDays.push(weekDaysTemp[index])
}
}
}
setWeekDays(selectedWeekDays)
باینری به دستگاه اعداد دودویی میگن، در دستگاه اعداد دودویی تنها رقم های 0 و 1 رو داریم و اعداد مختلف رو با این ارقام بوجود میاریم.
این اعدادی که شما نوشتین دودویی نیستن.
الان شما چطوری محاسبه کردین که عدد 97 حاصل میشه؟
این اعداد دو دویی نیستند، بلکه هگزادسیمال هستند، یعنی در مبنای 16 هستند.
شما ابتدا عدد 97 دریافتی رو به مبنای 16 می برید و حاصلش میشه: 0x0061
سپس دو رقم سمت راست رو کافیه تحلیل کنید:
رقم اول سمت راست:
1 --- > SUNDAY یکشنبه
2 ----> MONDAY دوشنبه
3 -----> یکشنبه و دوشنبه
4 -----> سه شنبه
5 -----> یکشنبه و سه شنبه
6 ------> دوشنبه و سه شنبه
7 ------> یکشنبه دوشنبه سه شنبه
8 ------> چهارشنبه
همینجوری 9 / a / b / c / d / e / f رو هم حساب می کنید.
رقم دوم رو هم باید محاسبه و تحلیل کنید.
البته مجدد بررسی کردم، دیدم راه ساده تری داره.
از همون ابتدا عدد حاصل جمع رو تبدیل به باینری کنید. در این مثال، 97 معادل دودویی ش میشه: 1100001
قاعده کلی: از سمت راست، معادل با ایام شما میشه: یکشنبه، دوشنبه، سه شنبه، چهارشنبه، پنجشنبه، جمعه، شنبه
از سمت راست این عدد دو دو یی، هر جا یک بودش، شامل اون روز میشه.
چون اعداد اول و ششم و هفتم رو شامل میشه، پس این روزها میشه: یکشنبه، جمعه، شنبه
@milad یه راه ساده تر هم هست. تصادفا فهمیدم که مثلا 97 رو اگر با ولیو روزهای هفته and کنیم فقط وقتی مقدار اون بزرگتر از 0 هست که اون ولیو تشکیل دهنده جمعش باشه. و با این منطق و کد زیر مشکلم حل شد. و نیاز به هیچ تبدیلی هم نبود
let weekDaysSum = props.selectedCampaignDetailData.weekDays
let selectedWeekDays = [];
let weekDaysTemp = [0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0040]
if (weekDaysSum && weekDaysSum > 0) {
for (let index = 0; index < weekDaysTemp.length; index++) {
//const element = array[index];
if (weekDaysSum & weekDaysTemp[index]) {
selectedWeekDays.push(weekDaysTemp[index])
}
}
}
setWeekDays(selectedWeekDays)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟